如何运行一个又一个的线程?

创建三个线程和主线程。 将每个线程作为同步任务执行。 退出每个线程时显示信息。

在此处输入图像描述

我可以通过上面的练习运行两个线程,但很难有三个线程。 这是我的计划。

package Thread; 

import 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是假的,一个等待它是真的,对吧? 有三个线程,您需要等待三个状态。 您还需要非常小心地以某种方式进行设置,以便状态转换以正确的顺序和设定的次数发生。

要么尝试编写该程序,并告诉我们出了什么问题,或者如果您想要设计帮助,最好告诉我们您最终希望实现的目标。

如果你有一个需要解决的真正的multithreading问题,那么建议就是查看队列之类的东西。 它们是非常好的高级抽象,可以更好地处理线程。

但更可能的是,你有一些需要解决的人工任务,然后你需要谈谈你所拥有的约束。

阅读有关Java Thread同步的教程。

公共类同步扩展Thread {

 public void run() { synchronized (this) { for (int i = 5; i > 0; i--) { System.out.print("Thread Name :" + Thread.currentThread().getName() + i+"\n"); } } } 

}

class demo {

 public static void main(String args[]) { sync obj1 =new sync(); sync obj2 =new sync(); sync obj3 =new sync(); obj1.setName("First"); obj2.setName("Second"); obj3.setName("Third"); obj1.start(); obj2.start(); obj3.start(); } 

}

 O/p: 

主题名称:First5主题名称:First4主题名称:First3主题名称:First2主题名称:First1主题名称:Second5主题名称:Second4主题名称:Second3主题名称:Second2主题名称:Second1主题名称:Third5主题名称:Third4主题名称:Third3线程名称:Third2线程名称:Third1

希望这可以帮助 :)