Java 如何创建侦听状态更改的线程?
我花了整整一上午的时间研究Android线程和锁是如何工作的。我读过关于线程、可运行、处理程序、异步任务、执行器、HandlerThread、ThreadPoolExecutor等的内容。我还阅读了条件、锁和同步方法。但是,对于应用程序中应该使用哪种类型的线程,我仍然犹豫不决 总结和简化,我的应用程序应该做到以下几点: 一个工作线程将附加到一个特定的片段,该片段显示一个包含不同元素的GridLayout。该线程应该生成与每个网格元素对应的随机数,并按顺序将它们发送到父片段,父片段将以固定的毫秒数隐藏它们。然而,当用户单击片段中需要某种同步使用的按钮时,线程应该能够暂停自己 问题如下: 在我的例子中,哪种安卓线程是最理想的? 如果用户想要暂停线程循环,那么监听线程循环内状态变化的最佳方法是什么? 目前,我正在考虑扩展raw Thread类并使用synchronize检查状态,但我觉得这不是实现这一点的最合适的方法 提前感谢。我认为RxJava非常适合解决这个问题。我远离我的IDE,但我设想你: 为每个单独的项目创建一个具有随机间隔的计时器,比如网格布局中的GridItemViewModel,并让它在完成时发出该项目 将所有这些计时器合并到一个列表中 同时运行所有计时器 当每个计时器完成时,它将发出其项,即ViewModel。使用该选项可在UI中隐藏相应的项 当所有项目完成时,它将在您的整体可观察范围内触发onComplete。调用此函数时,您知道所有任务都已完成。 所以Java 如何创建侦听状态更改的线程?,java,android,multithreading,Java,Android,Multithreading,我花了整整一上午的时间研究Android线程和锁是如何工作的。我读过关于线程、可运行、处理程序、异步任务、执行器、HandlerThread、ThreadPoolExecutor等的内容。我还阅读了条件、锁和同步方法。但是,对于应用程序中应该使用哪种类型的线程,我仍然犹豫不决 总结和简化,我的应用程序应该做到以下几点: 一个工作线程将附加到一个特定的片段,该片段显示一个包含不同元素的GridLayout。该线程应该生成与每个网格元素对应的随机数,并按顺序将它们发送到父片段,父片段将以固定的毫秒数
可能是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*/);