作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在两个线程之间建立通信,如下所示:第一个线程(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 更轻松地计算出您的生产者/消费者场景。封装设施。
关于java - 2个线程间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960704/
我是一名优秀的程序员,十分优秀!