Java 如何创建侦听状态更改的线程?

Java 如何创建侦听状态更改的线程?,java,android,multithreading,Java,Android,Multithreading,我花了整整一上午的时间研究Android线程和锁是如何工作的。我读过关于线程、可运行、处理程序、异步任务、执行器、HandlerThread、ThreadPoolExecutor等的内容。我还阅读了条件、锁和同步方法。但是,对于应用程序中应该使用哪种类型的线程,我仍然犹豫不决 总结和简化,我的应用程序应该做到以下几点: 一个工作线程将附加到一个特定的片段,该片段显示一个包含不同元素的GridLayout。该线程应该生成与每个网格元素对应的随机数,并按顺序将它们发送到父片段,父片段将以固定的毫秒数

我花了整整一上午的时间研究Android线程和锁是如何工作的。我读过关于线程、可运行、处理程序、异步任务、执行器、HandlerThread、ThreadPoolExecutor等的内容。我还阅读了条件、锁和同步方法。但是,对于应用程序中应该使用哪种类型的线程,我仍然犹豫不决

总结和简化,我的应用程序应该做到以下几点:

一个工作线程将附加到一个特定的片段,该片段显示一个包含不同元素的GridLayout。该线程应该生成与每个网格元素对应的随机数,并按顺序将它们发送到父片段,父片段将以固定的毫秒数隐藏它们。然而,当用户单击片段中需要某种同步使用的按钮时,线程应该能够暂停自己

问题如下:

在我的例子中,哪种安卓线程是最理想的? 如果用户想要暂停线程循环,那么监听线程循环内状态变化的最佳方法是什么? 目前,我正在考虑扩展raw Thread类并使用synchronize检查状态,但我觉得这不是实现这一点的最合适的方法

提前感谢。

我认为RxJava非常适合解决这个问题。我远离我的IDE,但我设想你:

为每个单独的项目创建一个具有随机间隔的计时器,比如网格布局中的GridItemViewModel,并让它在完成时发出该项目

将所有这些计时器合并到一个列表中

同时运行所有计时器

当每个计时器完成时,它将发出其项,即ViewModel。使用该选项可在UI中隐藏相应的项

当所有项目完成时,它将在您的整体可观察范围内触发onComplete。调用此函数时,您知道所有任务都已完成。 所以


可能是ThreadLocal的一个很好的用例,每个网格正方形都有自己的线程,其中包含自己的随机数generator@PPartisan这将是一个很好的方法,但在这种情况下,隐藏应该遵循一个序列,直到所有的隐藏。例如,seq=[3 2 1 4]将按特定顺序隐藏元素,因此有必要使用生成序列数组的单个线程。
final List<Observable<Item>> tasks = gridItems()
    .stream()
    .map(item -> {
        final int seconds = ThreadLocalRandom.current().next(0, 5);
        return Observable.timer(seconds, TimeUnits.SECONDS).map(ignore -> item);
     })
    .collect(Collectors.toList());

Observable.merge(tasks)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(item -> {
        //One item has completed. Take the "item" value
        // and use it to update your UI.
    }, t -> { /*No error handling*/}, () -> /*All items finished*/);