[英]java 2 Threads Printing numbers in sequence
我正在尝试使用 2 个线程按顺序打印 1 到 10。
这是代码。
public class Multithreading implements Runnable {
private static volatile Integer count = 1;
private static volatile String threadId = "1";
Object object = new Object();
@Override
public void run() {
try {
while (count <= 10) {
synchronized (object) {
if(!Thread.currentThread().getName().equals(threadId)) {
object.wait();
}
else {
System.out.println(Thread.currentThread().getName()+" "+ count);
count++;
if(threadId.equals("1"))
threadId = "2";
else threadId = "1";
object.notifyAll();
}
}
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Multithreading t1m = new Multithreading();
Multithreading t2m = new Multithreading();
Thread t1 = new Thread(t1m);
Thread t2 = new Thread(t2m);
t1.setName("1");
t2.setName("2");
t1.start();
t2.start();
}
}
但是在打印第一个线程打印 1 之后,两个线程都会等待。
我正在尝试在没有嵌套内部 class 的两个线程的序列解决方案中实现这 3 个线程打印数字。 任何帮助将不胜感激。
object
变量是成员变量。 您的Multithreading
class 的每个实例都在创建、同步、等待和通知自己不同的object
。 也许您的意思是让object
成为static
变量?
编辑:
在你引用的问题中, monitor
变量是一个成员变量——就像你的object
一样——但代码只创建了monitor
出现的 class 的一个实例。 所有线程共享同一个monitor
。 object
变量在该问题的最受好评的答案中也是如此。 在该答案中,所有线程共享相同的object
。
从这些示例中摆脱内部 class 的方式导致每个线程都有自己的独立object
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.