如何运行一个又一个的线程?
创建三个线程和主线程。 将每个线程作为同步任务执行。 退出每个线程时显示信息。
我可以通过上面的练习运行两个线程,但很难有三个线程。 这是我的计划。
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
希望这可以帮助 :)
- HK2 IterableProvider命名方法未找到实现
- 注释上的自定义Eclipse警告
- Java 8 toMap IllegalStateException Duplicate Key
- 使用Jasper Report导出包含嵌入图像的单个HTML
- 如何使用EasyMock期望
- 强制maven无法修复非空的违规行为
- Java.lang.NoClassDefFoundError:com / fasterxml / jackson / databind / exc / InvalidDefinitionException
- 如何设置maven 3本地插件库
- Spring Boot YARN无法在Hadoop上运行2.8.0客户端无法访问DataNode