我正在开发一个项目,其中一个线程分叉4个其他线程并等待它们完成。分叉线程应该能够随时停止分叉线程。 为了做到这一点,我做了一些事情:
class ForkedThread implements Runnable {
public boolean keepRunning = true;
public void run() {
while(keepRunning is true ){
//Do the Job
}
}
}
现在,由于 keepRunnig 是公开的,因此可以从外部访问,并且可以将其设为false。
我的问题是我是否必须同步 keepRunning 的使用或其罚款。
其次,这项技术还行吗。或者我应该使用ThreadPool
来完成我的工作。
实际上,使用ThreadPool
会增加我的代码的复杂性,这是我不想要的。请帮忙。
答案 0 :(得分:2)
简单地将keepRunning声明为volatile,即
public volatile boolean keepRunning = true;
你会没事的。 volatile告诉Java该变量将被多个线程访问,并且应该是线程安全的。这对于布尔人来说并不是一个大问题,但对于引用和长篇很重要。
您正在使用的技术是良好的做法。它允许正常终止有问题的线程。我建议您查看Java的新并发库(即ExecutorService),因为它们使您的工作变得更轻松,更安全。非常值得投资!
答案 1 :(得分:0)
您应该查看ExecutorService。它会做到这一点。