从线程开始新线程

时间:2011-12-20 06:31:01

标签: java multithreading

我正在开发一个项目,其中一个线程分叉4个其他线程并等待它们完成。分叉线程应该能够随时停止分叉线程。 为了做到这一点,我做了一些事情:

class ForkedThread implements Runnable {
    public boolean keepRunning = true;
    public void run() {
        while(keepRunning is true ){
        //Do the Job
        }
    }
}

现在,由于 keepRunnig 是公开的,因此可以从外部访问,并且可以将其设为false。 我的问题是我是否必须同步 keepRunning 的使用或其罚款。 其次,这项技术还行吗。或者我应该使用ThreadPool来完成我的工作。 实际上,使用ThreadPool会增加我的代码的复杂性,这是我不想要的。请帮忙。

2 个答案:

答案 0 :(得分:2)

简单地将keepRunning声明为volatile,即

public volatile boolean keepRunning = true;

你会没事的。 volatile告诉Java该变量将被多个线程访问,并且应该是线程安全的。这对于布尔人来说并不是一个大问题,但对于引用和长篇很重要。

您正在使用的技术是良好的做法。它允许正常终止有问题的线程。我建议您查看Java的新并发库(即ExecutorService),因为它们使您的工作变得更轻松,更安全。非常值得投资!

答案 1 :(得分:0)

您应该查看ExecutorService。它会做到这一点。