创建三个线程和主线程。将每个线程作为并发任务执行。退出每个线程时显示信息。
通过上述练习,我可以运行两个线程,但很难运行三个线程。这是我的程序。
package Thread;
导入java.util.concurrent.atomic.AtomicBoolean;
公开课测试{
static AtomicBoolean lock = new AtomicBoolean(false);
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("New Thread: "
+ Thread.currentThread().toString());
for (int i = 5; i > 0; i--) {
synchronized (lock) {
if (lock.get()) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("First: " + i);
if (i == 1) {
System.out.println("Second exiting.");
}
lock.set(true);
lock.notify();
}
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("New Thread: "
+ Thread.currentThread().toString());
for (int i = 5; i > 0; i--) {
synchronized (lock) {
if (!lock.get()) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Second: " + i);
if (i == 1) {
System.out.println("Second exiting.");
}
lock.set(false);
lock.notify();
}
}
}
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main thread exiting.");
}
}
结果:
你能给我一些解决这个问题的方法或技巧吗?谢谢您的回复!
最佳答案
目前还不清楚您想要三个线程做什么。有两个线程 一个等待 bool 为 false,一个等待 bool 为 true,对吗? 对于三个线程,您需要三种状态来等待。你还需要成为 非常小心地设置它,以便状态转换准确地发生 以正确的顺序和设定的次数。
要么尝试编写该程序,然后告诉我们出了什么问题,或者如果您愿意 设计帮助最好告诉我们更多关于您想要实现的目标 结束。
如果您有真正的多线程问题需要解决,请提供建议 就是研究类似 queues 的东西。它们是非常好的高级抽象 这使得线程的使用变得更好。
更有可能的是,您有一些需要解决的人工任务,然后 您需要谈谈您所面临的限制。
关于java - 如何让线程一个接一个地运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23104709/