关于多线程:Java中的线程同步问题

 2020-10-19 

Thread Synchronization problem in java

大家好,

我有一个线程检查器(扩展线程类),它不断将数字从1000减少到0,并在数字达到0时停止。减法之间的睡眠时间为10秒,因此它像1000、990、980一样继续。 ... 等等。此计数将永久存储,因此减少后将不会重置为1000。

我需要实现以下情况:

  • 我有2类A和B具有main()方法。他们在main()中启动此线程。现在,如果类A正在运行Checker线程,则类B中的线程应该等待,除非直到类A完成执行。
  • 即使A类中的Checker线程正在睡眠,B类的线程也不应启动。
  • 仅当A类的检查器线程停止时,B类的线程才会开始执行。
  • 如何在A类和B类之间实现这种同步?

    从类A和B开始检查线程也是完全随机的。任何线程都可以随时启动。
    如果A中的Checker启动并且B正在运行,则它应等待B完全结束或停止。反之亦然。


    让他们共享一个线程执行器,然后将任务提交给它。

    1
    Executor executor = Executors.newSingleThreadExecutor();

    以下是Executors#newSingleThreadExecutor() javadoc的相关性摘录:

    Tasks are guaranteed to execute sequentially, and no more than one task will be active at any given time.