为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过线程1打印第二个数字和如何通过线程2打印第二个数字

如何通过线程1打印第二个数字和如何通过线程2打印第二个数字

慕码人2483693 2021-04-12 21:31:18
我做了一个程序,使用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 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

首先是第一件事。您没有在线程中使用同步,如果要使用同步,join()需要if在run方法中使用

static int value = 6;

不是线程安全的!为了更好地使用AtomicInteger并控制theads,请检查 ExecutorService


查看完整回答
反对 回复 2021-04-28
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您可以在第一个线程完成之后等待启动第二个线程,基本上,您需要同步线程执行。

为此,您可以:

  • 输入具有synchronized相同键的块

  • wait notify在同一把锁上使用关键字

  • 使用javaLock

  • join在第一个线程上使用以等待他完成后再开始第二个线程

  • 使用Observable来协调线程的开始

还有许多其他。


查看完整回答
反对 回复 2021-04-28
  • 3 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信