gpt4 book ai didi

java - 2个线程间的通信

转载 作者:行者123 更新时间:2023-12-01 15:35:16 24 4
gpt4 key购买 nike

我想在两个线程之间建立通信,如下所示:第一个线程(Sender)向第二个线程(Receiver)发送一个整数,Receiver 显示该整数的平方。这是我的代码:Carre.java(主):

public class Carre {
static Boolean msgArrived = Boolean.FALSE ;
static int n ;

public static void main(String[] args) {
Thread sender = new Thread(new Sender()) ;
Thread receiver = new Thread(new Receiver()) ;
sender.start() ;
receiver.start() ;
}

public int getN() {
return n;
}
}

Sender.java:

import java.util.Random;

public class Sender implements Runnable {

@Override
public void run() {
while(Carre.msgArrived == Boolean.TRUE) {
try {
wait() ;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int i = 0; i < 10; i ++) {
Random ran = new Random() ;
Carre.n = ran.nextInt(100) ;
Carre.msgArrived = Boolean.TRUE ;
notifyAll() ;
}
}
}

Receiver.java

公共(public)类 Receiver 实现 Runnable {

    @Override
public void run() {
while(Carre.msgArrived == Boolean.FALSE) {
try {
wait() ;
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Carre.n * Carre.n) ;
Carre.msgArrived = Boolean.TRUE ;
notifyAll() ;
}
}

& 当我尝试执行代码时,我收到此错误消息:

线程“Thread-1”中的异常 java.lang.IllegalMonitorStateException

at java.lang.Object.wait(Native Method)

at java.lang.Object.wait(Object.java:502)

at Receiver.run(Receiver.java:12)

at java.lang.Thread.run(Thread.java:636)

线程“Thread-0”中的异常 java.lang.IllegalMonitorStateException

at java.lang.Object.notifyAll(Native Method)

at Sender.run(Sender.java:19)

at java.lang.Thread.run(Thread.java:636)

最佳答案

在我看来,最好不要直接使用线程,因为它们是太低级别的并发实体,因此更难使用。您应该能够通过 java.util.concurrent 更轻松地计算出您的生产者/消费者场景。封装设施。

您可以在这里查看:Producer/Consumer threads using a Queue

关于java - 2个线程间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com