我正在尝试学习如何在Java中使用线程。目前我陷入了一个练习,我有三个线程A,B和C,每个线程都有一个本地数组。我想让三个线程相互通信,以便它们能够找到与所有本地数组相互交叉(相交)的最低数量。如果有这样的数字我想要线程B打印它并关闭其他线程,如果没有这样的数字我的意图是关闭程序。可能的解决方案是什么?如何在该场景中的线程之间传递信息? 到目前为止,这是我的代码:
import java.util.Random;
import java.util.Arrays;
public class MyThread implements Runnable {
private Thread thrd;
private Random randomInteger;
private int[] localArray;
MyThread(String name, int sizeOfLocalArray) {
localArray = new int[sizeOfLocalArray];
randomInteger = new Random();
for (int i = 0; i < localArray.length; i++) {
localArray[i] = randomInteger.nextInt();
}
Arrays.sort(localArray);
thrd = new Thread(this, name);
thrd.start();
}
@Override
public void run() {
System.out.println(thrd.getName() + " starting");
for (int number : localArray) {
System.out.println(number + ", ");
}
System.out.println();
System.out.println(thrd.getName() + " terminating");
}
}
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread("threadF", 5);
}
}
答案 0 :(得分:0)
您需要使用共享变量来完成此操作,但要小心同步对它的访问。您可以通过它的构造函数将共享变量传递给每个线程来访问它。我建议将共享变量包装在一个类中,以便您可以同步访问。
Class ArrayHolder{
private int[] localArray;
public ArrayHolder(){
//initialize vars here
}
public synchronized int lowerstInterection(int[] intArray){
//write the logic here
}
}
现在,在构造线程时,通过构造函数传递ArrayHolder,如此
public class Main {
public static void main(String[] args) {
ArrayHolder arrayHolder = new ArrayHolder()
MyThread myThread = new MyThread("threadF", 5, arrayHolder);
MyThread myThread = new MyThread("threadG", 5, arrayHolder);
MyThread myThread = new MyThread("threadH", 5, arrayHolder);
}
}