线程用Java进行通信

时间:2015-01-27 21:08:15

标签: java multithreading

我正在尝试学习如何在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);
    }    
}

1 个答案:

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