我做了一个程序,使用2个线程打印5个数字。public class Class1 {static int value = 6; public void show() { for (int i = 0; i < value; value--) { System.out.println(Thread.currentThread().getName() + " - Number: " + value); }} public static void main(String[] args) { final Class1 main = new Class1(); Runnable runner = new Runnable() { @Override public void run() { main.show(); } }; new Thread(runner, "Thread 1").start(); new Thread(runner, "Thread 2").start();} }它给了我这样的输出:Thread 1 - Number: 6Thread 2 - Number: 6Thread 1 - Number: 5Thread 2 - Number: 4Thread 1 - Number: 3Thread 1 - Number: 1Thread 2 - Number: 2但是我希望它给我这样的输出Thread 1 - Number: 6Thread 1 - Number: 5Thread 1 - Number: 4Thread 2 - Number: 3Thread 2 - Number: 2Thread 2 - Number: 1我知道我们可以简单地在show()方法中使用if else条件,但是我不想在show()方法中使用if else,我想在main()方法中更改执行以下操作的某些操作完工。
3 回答
![?](http://img1.sycdn.imooc.com/5458472300015f4702200220-100-100.jpg)
开心每一天1111
TA贡献1836条经验 获得超13个赞
首先是第一件事。您没有在线程中使用同步,如果要使用同步,则join()
需要if
在run方法中使用
static int value = 6;
不是线程安全的!为了更好地使用AtomicInteger并控制theads,请检查 ExecutorService
![?](http://img1.sycdn.imooc.com/5333a1660001394602000200-100-100.jpg)
阿波罗的战车
TA贡献1862条经验 获得超6个赞
您可以在第一个线程完成之后等待启动第二个线程,基本上,您需要同步线程执行。
为此,您可以:
输入具有
synchronized
相同键的块wait
notify
在同一把锁上使用关键字使用java
Lock
类join
在第一个线程上使用以等待他完成后再开始第二个线程使用
Observable
来协调线程的开始
还有许多其他。
添加回答
举报
0/150
提交
取消