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],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义的更多相关文章

  1. 已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数

    import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:04 * @description ...

  2. 面试题: 已知一个含有n个不同元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的)

    TX面试题2: 已知一个含有n个元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的) 题目分析, 为了便于说明,不妨将问题简化一下: 已知一个盒子中有n个不同的球,分别标记为{a1,a2,. ...

  3. 已知一个序列A1.A2….An,给你一个整数K,找到满足所有Ai+Aj>=k的数对(i,j)的个数

    #include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 100010 /* 已知一个序 ...

  4. 已知一个正整数m,编写一个程序求m的反序数(待消化)

    import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/5 21:08 * @description ...

  5. 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。

    题目: 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数. 思路: 假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢? 解法 ...

  6. Java笔试题:给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?

    在Java笔试面试中,经常会遇到代码题,今天我们就来看一则Java代码笔试题. 有如下代码: Class ReadOnlyClass { private Integer age=20; public ...

  7. poj1190,DFS/已知一个等式,求另一个最小值

    7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.  设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱. ...

  8. 序列化工具类({对实体Bean进行序列化操作.},{将字节数组反序列化为实体Bean.})

    package com.dsj.gdbd.utils.serialize; import java.io.ByteArrayInputStream; import java.io.ByteArrayO ...

  9. 已知一个数组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.除 ...

随机推荐

  1. OpenStack Weekly Rank 2015.08.24

    Module Reviews Drafted Blueprints Completed Blueprints Filed Bugs Resolved Bugs Cinder 5 1 1 6 13 Sw ...

  2. WPF 正確理解ContentPresenter

    我們先由下圖來看類層次,可知ContentControl繼承Control,ContentPresenter繼承FrameworkElement(Control也繼承FrameworkElement) ...

  3. fileupload NPOI导入EXECL数据

    fileupload JS @section scripts{ <script src="~/Content/js/fileupload/vendor/jquery.ui.widget ...

  4. js动态控制导航栏样式

    导航栏一般做为母版页,为了使增加用户体验,往往在用户进入某个页面给予导航栏相应的样式,这里可以用js动态添加 <div class="box_left fl"> < ...

  5. jquery-validate插件

    jQuery Validation 插件 优点:1.表单验证非常简单方便,并且提供了许多配置项目2.国际化,可以自定义提示信息 命令行安装 //初始化bowerbower init //使用bower ...

  6. 【起航计划 002】2015 起航计划 Android APIDemo的魔鬼步伐 01

    本文链接:[起航计划 002]2015 起航计划 Android APIDemo的魔鬼步伐 01 参考链接:http://blog.csdn.net/column/details/mapdigitap ...

  7. [MedicalEndoscope]PFC介绍

    PFC的英文全称为“Power Factor Correction”,意思是“功率因数校正”,功率因数指的是有效功率与总耗电量(视在功率)之间的关系,也就是有效功率除以总耗电量(视在功率)的比值. 基 ...

  8. 第五章 存储过程&触发器

    1.前言 2.存储过程和触发器->存储过程 ·理解:是一组SQL命令集合,经过预编译存放在系统中:就像java程序里的方法,可以重复的被调用: 在日常的数据库操作中,会有大量的T-SQL批处理. ...

  9. JavaScript基础:逻辑运算符——&&和||(短路判断)和!

    一.&&:所有条件都为true,返回true:只要有一个是false,返回false:不一定返回boolean类型值 1.可以操作任意类型的数据,不只是布尔型:(除了null.unde ...

  10. 原生Js在各大浏览器上、火狐、ie、谷歌、360等出现的不兼容问题。

    1 document.getElementsByName("name")  在Ie低版本,360普通版本,以及火狐低版本不支持. 2 element.innerText 在低版本的 ...