Java中的线程通信

Java中的线程通信,java,multithreading,Java,Multithreading,我正在尝试学习如何在Java中使用线程。目前,我一直在做一个练习,我有三个线程A、B和C,每个线程都有一个本地数组。我想让这三个线程相互通信,这样它们就可以找到与所有本地数组相互(相交)的最小可能数。如果有这样一个数字,我希望线程B打印它并关闭其他线程,如果没有这样的数字,我的意图是关闭程序。可能的解决办法是什么?在这种情况下,如何在线程之间传递信息? 以下是我目前的代码: import java.util.Random; import java.util.Arrays; public cla

我正在尝试学习如何在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);
    }    
}
import java.util.Random;
导入java.util.array;
公共类MyThread实现可运行{
私有线程thrd;
私有随机整数;
私有int[]本地数组;
MyThread(字符串名,int-sizeOfLocalArray){
localArray=newint[sizeoflocarray];
randomInteger=新的Random();
for(int i=0;i
您需要使用共享变量来完成此操作,但要小心同步对它的访问。您可以通过将共享变量通过其构造函数传递给每个线程来访问它。我建议将共享变量包装到类中,以便同步访问

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);
    }    
}

嗯,线程是对象,可以像其他对象一样相互通信。我建议先不用线程来解决这个问题:只有三个普通的类和本地数组。你能展示更多的工作吗?例如,我在上面的应用程序中只看到一个线程。多线程是如何启动的?他们是如何共享本地数组的?我不知道如何解决这个问题。我试过很多方法。我在没有线程的情况下制作了它,但我不知道它现在如何应用于线程。如何找到所有三个本地表共有的最小值,即三个线程中的每个表都不同。谢谢你迄今为止的回答。我都读了。但是,任何进一步的帮助都将是巨大的。如何解决这个问题?