Java多线程排序

marwi_study 2019-10-31 09:38:05
请问大神们,Java多线程排序该怎么写啊,为什么我的线程写了一个冒泡排序然后启动后没排成功?
public class MyThread5 implements Runnable {
private int begin;
private int end;
public static int[] number;

public MyThread5(int b,int e) {
this.begin = b;
this.end = e;
}

@Override
public void run() {
for(int i = begin; i < end; i++) {
for(int j = begin; j < end - i - 1; j++) {
if(number[j] > number[j+1]) {
int temp = number[j];
number[j] = number[j+1];
number[j+1] = temp;
System.out.println(number[j]);
}
}
}
}

}

//调用部分
for(int i = 0; i < 2; i++) {
new Thread(new MyThread5(i * n/2,(i+1)*n/2)).start();
}

...全文
230 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
marwi_study 2019-11-22
  • 打赏
  • 举报
回复
已找到解决方法,结帖! 方法是设置障栅CyclicBarrier,将数组分成前后两部分或者奇偶两部分,分别排序,等到两个线程都运行结束在进行合并操作。
weixin_40599844 2019-11-22
  • 打赏
  • 举报
回复
代码分析
比如
1 第一个线程走到if,判断为真,刚要执行交换值的时候让出了cpu,轮到第二个线程执行
2 第二个线程也走到if,判断也为真(因为第一个线程还没交换值,大小判断没变),然后往下执行值交换,刚交换完又让出cpu,轮到第一个线程执行
3 第一个线程接着1,往下执行值交换,此时,2刚交换好的值又被改回来了,也就是第一个线程把第二个线程已经交换好的两个值又交换回来了,所以结果相当于没有交换
线程一二如此往复,所以最终结果没能达到预想的效果
Defonds 2019-11-01
  • 打赏
  • 举报
回复
有个多线程睡眠排序算法的,参考下
dkwuxiang 2019-11-01
  • 打赏
  • 举报
回复
第一:你分线程分段排序,以目前的代码,比如数组长度100,第一个线程,只排0-50(只是0-50之间的比较),第二个线程排50-100(50-100之间的比较),最后的数组整个并没有排好顺序; 第二:代码有问题 for(int i = begin; i < end; i++) { for(int j = begin; j < end - i - 1; j++) { 第二层循环,在第二个线程(50-100段时),for(int j=50;j<100-50-1;j++),循环条件不成立;
万猫学社 2019-11-01
  • 打赏
  • 举报
回复
冒泡还能用多线程啊?
marwi_study 2019-10-31
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
代码分析 比如 1 第一个线程走到if,判断为真,刚要执行交换值的时候让出了cpu,轮到第二个线程执行 2 第二个线程也走到if,判断也为真(因为第一个线程还没交换值,大小判断没变),然后往下执行值交换,刚交换完又让出cpu,轮到第一个线程执行 3 第一个线程接着1,往下执行值交换,此时,2刚交换好的值又被改回来了,也就是第一个线程把第二个线程已经交换好的两个值又交换回来了,所以结果相当于没有交换 线程一二如此往复,所以最终结果没能达到预想的效果
但是我的代码是先将数组分为前后两组,然后两个线程分别处理的是前后两组的数据啊,根本不会交换到同一个数据
qybao 2019-10-31
  • 打赏
  • 举报
回复
代码分析 比如 1 第一个线程走到if,判断为真,刚要执行交换值的时候让出了cpu,轮到第二个线程执行 2 第二个线程也走到if,判断也为真(因为第一个线程还没交换值,大小判断没变),然后往下执行值交换,刚交换完又让出cpu,轮到第一个线程执行 3 第一个线程接着1,往下执行值交换,此时,2刚交换好的值又被改回来了,也就是第一个线程把第二个线程已经交换好的两个值又交换回来了,所以结果相当于没有交换 线程一二如此往复,所以最终结果没能达到预想的效果

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧