java面试题:已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义
package com.swift; import java.util.Arrays;
import java.util.Comparator; public class ArrayThread_Test { public static void main(String[] args) {
/*
* 已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义
*/
Integer[] arr = new Integer[] { 2, 4, 6, 2, 1, 5 };
// 通过数组工具类排序
Arrays.sort(arr, new Comparator<Integer>() { @Override
public int compare(Integer arg0, Integer arg1) {
int num = arg1 - arg0;
return num;
}
});
// 双线快速排序
Integer[] arr2 = new Integer[] { 7, 2, 4, 16, 2, 13, 5 };
kuaisu(arr2, 0, arr2.length - 1);
for (Integer i : arr2) {
System.out.print(i + "~" + "\r\n");
} ArrayThread a = new ArrayThread(arr);
Thread t1 = new Thread(a, "线程1");
Thread t2 = new Thread(a, "线程2"); t1.start();
t2.start(); } private static void kuaisu(Integer[] arr2, int left, int right) { if (left >=right)//当递归到只有一个数时停止
return;
int key = arr2[left];
int i = left;
int j = right;
while (i != j) {
while (arr2[j] > key && i < j) {
j--;
}
while (arr2[i] <= key && i < j) {
i++;
}
if (i < j) {
int temp;
temp=arr2[i];
arr2[i]=arr2[j];
arr2[j]=temp;
}
}
arr2[left]=arr2[i];
arr2[i]=key;
kuaisu(arr2, left, j - 1);
kuaisu(arr2, i + 1, right);
} }
上边是测试类,进行了快速排序 和工具类排序
建立了一个实现Runnable接口的对象,并传递参数
建立两个线程并启动线程
package com.swift;
public class ArrayThread implements Runnable{
Integer[] arr;
int index=0;
boolean flag=true;
public ArrayThread(Integer[] arr) {
this.arr=arr;
}
@Override
public void run() {
//for循环在多线程下不适合,虽然是一个对象的内容也会被执行多次循环,因为锁在for循环里边
while (true) {
synchronized (this) {
if(index>=arr.length) {
this.notify();//不唤醒其他线程为什么出不去?虚拟机不停止
break;
}
System.out.println(Thread.currentThread().getName() + " 的输出" + arr[index]);
index++;
if(flag) {
flag=false;
this.notify();
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
flag=true;
this.notify();
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
通过notify唤醒其他线程,通过wait停止自身线程,通过flag标志为交替切换线程
java面试题:已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义的更多相关文章
- 已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数
import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:04 * @description ...
- 面试题: 已知一个含有n个不同元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的)
TX面试题2: 已知一个含有n个元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的) 题目分析, 为了便于说明,不妨将问题简化一下: 已知一个盒子中有n个不同的球,分别标记为{a1,a2,. ...
- 已知一个序列A1.A2….An,给你一个整数K,找到满足所有Ai+Aj>=k的数对(i,j)的个数
#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 100010 /* 已知一个序 ...
- 已知一个正整数m,编写一个程序求m的反序数(待消化)
import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/5 21:08 * @description ...
- 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。
题目: 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数. 思路: 假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢? 解法 ...
- Java笔试题:给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?
在Java笔试面试中,经常会遇到代码题,今天我们就来看一则Java代码笔试题. 有如下代码: Class ReadOnlyClass { private Integer age=20; public ...
- poj1190,DFS/已知一个等式,求另一个最小值
7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱. ...
- 序列化工具类({对实体Bean进行序列化操作.},{将字节数组反序列化为实体Bean.})
package com.dsj.gdbd.utils.serialize; import java.io.ByteArrayInputStream; import java.io.ByteArrayO ...
- 已知一个数组a[N]来构造数组b[N]的有趣算法题
给定一个数组a[N],我们希望构造数组b[N],其中b[i]=a[0]*a[1]*...*a[N-1]/a[i].在构造过程要求满足:1.不使用除法:2.O(1)空间复杂度和O(n)时间复杂度:3.除 ...
随机推荐
- Monkey King(左偏树 可并堆)
我们知道如果要我们给一个序列排序,按照某种大小顺序关系,我们很容易想到优先队列,的确很方便,但是优先队列也有解决不了的问题,当题目要求你把两个优先队列合并的时候,这就实现不了了 优先队列只有插入 删除 ...
- leetcode 175 Combine Two Tables join用法
https://leetcode.com/problemset/database/ ACM退役,刚好要学sql,一定要刷题才行,leetcode吧. 这一题,说了两个表,一个左一个右吧,左边的pers ...
- xubuntu 安装一款漂亮的图标
sudo add-apt-repository ppa:noobslab/icons sudo apt-get update sudo apt-get install square-beam-icon ...
- 《nginx 四》双机主从热备
lvs+keepalived+nginx实现高性能负载均衡集群 LVS作用 LVS是一个开源的软件,可以实现传输层四层负载均衡.LVS是Linux Virtual Server的缩写,意思是Linux ...
- WPF 正確理解ContentPresenter
我們先由下圖來看類層次,可知ContentControl繼承Control,ContentPresenter繼承FrameworkElement(Control也繼承FrameworkElement) ...
- asp.net 翻页时用ViewState保存上一页checkbox勾选的值
/// <summary> /// checkbox勾选取消勾选事件 /// </summary> /// <param nam ...
- Mysql远程连接授权IP
新增法 我们现在增加一个'username'用户,密码为'password',让其能够从外部访问MYSQL. grant all on * to 'username' identified by ...
- Hibernate课程 初探多对多映射1-1 多对多应用场景
1 用途: 员工和项目之间的多对多关系 2 实现: 员工表和项目表之外,建立员工和项目关联表来实现: 3 hibernate应用: set元素和many-to-many来实现
- System Center Configuration Manager 2016 必要条件准备篇(Part4)
步骤4.重新启动Configuration Manager主服务器 注意:在Configuration Manager服务器(CM01)上以本地管理员身份执行以下操作 打开管理命令提示符并发出以下 ...
- ASP.NET与json对象互转
这两天写这个xml跟json的读写,心累啊,也不是很理解,请大家多指教 首先来个热身菜做一个简单的解析json 在script里写一个简单的弹窗效果 <script> //script里简 ...