是否可以在 Java (Android) 中实现带有自己的状态的自定义版本的线程?
我的意思是:当 ThreadA 处于 Running 状态时,它仍然可以由 ThreadB 轮询,询问其状态
e.g.
ThreadA.getState();
可以将状态值修改为一些自定义值吗?为了在这两个线程之间实现一种基本的通信系统?
谢谢。
是否可以在 Java (Android) 中实现带有自己的状态的自定义版本的线程?
我的意思是:当 ThreadA 处于 Running 状态时,它仍然可以由 ThreadB 轮询,询问其状态
e.g.
ThreadA.getState();
可以将状态值修改为一些自定义值吗?为了在这两个线程之间实现一种基本的通信系统?
谢谢。
是的,这是可能的。我在以前的项目中经常使用它,您所需要的只是扩展Thread
类。
public class StateThread extends Thread{
String state = "ThreadState";
public synchronized void setState(String newState){
state = newState;
}
public synchronized String getState(){
return state;
}
@override
public void run(){
// Do stuff and update state...
}
}
是的,可以执行此任务。
这是一个好的设计吗?我不这么认为。
还有其他方法可以在线程之间执行通信 -
例如,您应该使用具有生产者/消费者模式的队列。
我确信 Android,因为 JavaSE 支持线程本地 - 您可以使用它来管理本地线程数据(包括状态)(可能与将获得“操作”的队列结合使用以更改线程管理的状态
如果您确实决定采用 setState 和 getState 方法的解决方案,至少考虑使用 ReaderWriterLock 来优化您的锁定
线程状态由虚拟机维护。VM 使用状态来监视和管理实际线程。
这就是为什么没有修改线程状态的机制。没有setState
允许设置自定义状态的功能。
为了您的应用程序目的,您可以通过扩展 Thread 来定义自己的实例变量,但这不能以任何方式改变 Thread 的状态。
与共享数据同步对于确定线程的“状态”不是很有用 - 线程将其状态写入“健康”,然后卡住 - 监视器线程然后检查状态并发现它是健康的。
监控“状态”应该意味着让被检查的线程做一些事情,而不仅仅是直接查看某个共享对象。
如果您有消息传递设计(如 zaske 建议的那样),您可以在每个线程的输入队列中传递“状态记录”,要求它在内部记录其状态并将其传递给下一个线程。'monitor' 线程等待记录回来,全部填写。如果它在合理的时间内没有得到它,它可以记录它所得到的——它保持对状态记录对象的引用,所以它可以看到哪个线程尚未更新其状态。它可能无法提供看门狗定时器。