如何使用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交换器();
说明:
每个线程创建一个单独的交换器。将其设置为静态将导致
交换器的实例在线程之间共享。该死,我很抱歉在这个问题上浪费您的时间,这是一个多么愚蠢的错误。谢谢你的帮助。不用担心:)。您还可以通过线程的构造函数传递交换器的实例。我明白了,明白了!