如何使用Java交换机?

如何使用Java交换机?,java,multithreading,Java,Multithreading,我正在尝试测试一个交换器的功能,在这里我可以在一个线程中创建一些数据,然后并发地将其传输到另一个线程。我希望交换机能这样做。线程中使用的交换方法应该进入等待状态,等待另一个线程处于该状态,然后交换信息。然而,我所有的线程都一直在等待,从不进行交互。这怎么可能?如果他们正在等待对方,那么他们不应该继续行动并进入下一行吗?谢谢你的建议 import java.util.Random; import java.util.concurrent.Exchanger; class CustomThread

我正在尝试测试一个交换器的功能,在这里我可以在一个线程中创建一些数据,然后并发地将其传输到另一个线程。我希望交换机能这样做。线程中使用的交换方法应该进入等待状态,等待另一个线程处于该状态,然后交换信息。然而,我所有的线程都一直在等待,从不进行交互。这怎么可能?如果他们正在等待对方,那么他们不应该继续行动并进入下一行吗?谢谢你的建议

import java.util.Random;
import java.util.concurrent.Exchanger;

class CustomThread extends Thread {

    private Exchanger<Integer> exchange = new Exchanger<>();

    CustomThread() {

    }


    private void testExchanger() throws InterruptedException {
        Random r = new Random();
        int sendx = r.nextInt(1000);
        int recievex = exchange.exchange(sendx);
        System.out.println(currentThread().getId() + " recieved " + recievex);
    }

    public void run() {
        try {
            testExchanger();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public class Main {
    public static void main(String[] args) {
                Thread[] threads = new Thread[6];
                for (int i = 0; i < threads.length; i++) {
                    threads[i] = new CustomThread();
                    threads[i].start();
                }

                for (Thread thread : threads) {
                    try {
                        thread.join();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }




            }



}
import java.util.Random;
导入java.util.concurrent.Exchanger;
类CustomThread扩展线程{
专用交换机交换=新交换机();
自定义线程(){
}
私有void testExchanger()引发InterruptedException{
随机r=新随机();
int sendx=r.nextInt(1000);
int receivex=exchange.exchange(sendx);
System.out.println(currentThread().getId()+“received”+receivex);
}
公开募捐{
试一试{
testExchanger();
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}
公共班机{
公共静态void main(字符串[]args){
线程[]线程=新线程[6];
对于(int i=0;i
更改此行

专用交换机交换=新交换机();
对此

private static交换器exchange=new交换器();
说明:
每个线程创建一个单独的交换器。将其设置为静态将导致
交换器的实例在线程之间共享。

该死,我很抱歉在这个问题上浪费您的时间,这是一个多么愚蠢的错误。谢谢你的帮助。不用担心:)。您还可以通过线程的构造函数传递
交换器的实例。我明白了,明白了!