java多线程作业
假设将数据(没有重复的数据)存放在一个较大的数组里,利用多线程并发的方式再数组中查找数据(例如数组的大小为100,如果两个线程的话,一个线程就从1到50之间找,另外一个线程就在51到100之间找),如果某一个线程找到该数据,其他线程提前终止(思考一下,如何实现)。
一种巧妙的方法 即将要搜索的区间当做线程的名字这样就可以采用数据共享的多线程
module xiancheng {
requires java.base;
}
package xiancheng;
public class Xianc implements Runnable{
private int nam;
private int x[]=new int[100005];
private boolean flag=false;
public Xianc(int inam,int ix[]) {
this.x=ix;
this.nam=inam;
}
public void run() {
String strname=Thread.currentThread().getName();
String strnum[]=strname.split("-");//在-处分割;
int l=Integer.valueOf(strnum[0]);//将string变成int
int r=Integer.valueOf(strnum[1]);
for(int i=l;i<=r;i++) {
System.out.println(Thread.currentThread().getName()+" xi= "+x[i] );
if(flag==true)
break;
if(x[i]==nam) {
System.out.println(strnum[2]+" find");
flag=true;
break;
}
}
}
public boolean isFlag() {
return flag;
}
}
package xiancheng;
import java.util.Random;
public class Test {
public static void main(String[] args) {
int a[]=new int[10005];
Random rand=new Random();
for(int i=0;i<10000;i++) {
a[i]=rand.nextInt(1000);
}
Xianc d=new Xianc(300,a);
Thread th1=new Thread(d,"0-1000-A");
Thread th2=new Thread(d,"1001-5000-B");
Thread th3=new Thread(d,"5001-9999-C");
th1.start();
th2.start();
th3.start();
if(!d.isFlag())
System.out.println("没找到");
}
}