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. Redis Intro - Dict

    https://segmentfault.com/a/1190000004850844

  2. Python文本数据分析与处理

    Python文本数据分析与处理(新闻摘要) 分词 使用jieba分词, 注意lcut只接受字符串 过滤停用词 TF-IDF得到摘要信息或者使用LDA主题模型 TF-IDF有两种 jieba.analy ...

  3. C#读写txt文件的方法

    1.添加命名空间 System.IO; System.Text; 2.文件的读取 #region 读取TXT文本文件 /// <summary> /// FileStream读取文本文件 ...

  4. ASP.NET MVC扩展自定义视图引擎支持多模板&动态换肤skins机制

    ASP.NET mvc的razor视图引擎是一个非常好的.NET MVC框架内置的视图引擎.一般情况我们使用.NET MVC框架为我们提供的这个Razor视图引擎就足够了.但是有时我们想在我们的项目支 ...

  5. 深入.NET框架。

    1.Microsoft.NET框架结构是一个面向网络,支持各种用户终端的开发平台. 2..NET框架的主要内容有CLR,FCL,ADO.NET,XML,ASP.NET,WinForms和WebSeri ...

  6. Java基于jdbc链接mysql数据库步骤示列

    用JDBC来链接MYSQL数据库,基本步骤都大同小异,只不过不同的数据库之间的URL地址有些不同.其基本步骤可分为以下几点: 1.加载相应的数据库的JDBC驱动程序. 2.利用驱动管理器DriverM ...

  7. as3.0 动态文本属性大全

    var my_fmt = new TextFormat();//常用样式 my_fmt.align = "center"; my_fmt.blockIndent = 50; //区 ...

  8. css随堂笔记(二)

    css   sub注释 注释不能嵌套 sub生成结构代码快捷 复合选择器 1.后代选择器 语法:选择器1 选择器2 选择器3  { 属性名:属性值 } 2.子代选择器 子代选择器语法: 选择器1> ...

  9. The fool doth think he is wise, but the wise man knows himself to be a fool.

    The fool doth think he is wise, but the wise man knows himself to be a fool.愚者总自以为聪明,智者则有自知之明.

  10. android 屏幕单击位置测试

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...