Java 当一个任务正在运行时禁止另一个任务

Java 当一个任务正在运行时禁止另一个任务,java,multithreading,Java,Multithreading,假设我在for循环中创建并启动了一组线程,这些线程在启动线程的run方法中执行。也就是说,我希望能够中断启动线程和该线程创建的所有线程,我通过一个按钮来实现这一点 像这样的- try{ for(int i = 0; i < n;i++){ Worker currThread = new Worker(someArgs); workerThreads.add(currThread);

假设我在for循环中创建并启动了一组线程,这些线程在启动线程的run方法中执行。也就是说,我希望能够中断启动线程和该线程创建的所有线程,我通过一个按钮来实现这一点

像这样的-

try{
            for(int i = 0; i < n;i++){

                Worker currThread = new Worker(someArgs);
                workerThreads.add(currThread);
                currThread.start();
            }
        } catch (InterruptedException e){
            e.printStackTrace();
        }

这样行吗?我这样问是因为我不确定如何测试它是否会

分别启动线程和创建线程

for(int i = 0; i < n; i++) {
    Worker currThread = new Worker(someArgs);
    workerThreads.add(currThread);
}

// later
for (Worker w : workerThreads) {
    w.start();
}

无论要执行的底层操作多么复杂,同步的概念都是一样的


正如您所指定的,有两种类型的互斥任务(线程创建和中断)。因此,锁定几乎是这项工作的标准工具。

等等-如果我迟钝,请原谅,但我不明白这是如何解决问题的-在创建线程之后和线程开始之前不能按下停止按钮吗?@praks5432是的,但线程在那一点上不会运行,因此,如果您的线程没有被编程为检查中断标志,那么调用
interrupt
将不会起任何作用。如果线程处于时间等待或阻塞状态,可能唯一的效果是可见的。但如果它们处于运行状态,它们不会停止,除非它们被编程为这样做。
synchronized(dummyObject){
//thread creation or interruption code here (shown above) 
}
for(int i = 0; i < n; i++) {
    Worker currThread = new Worker(someArgs);
    workerThreads.add(currThread);
}

// later
for (Worker w : workerThreads) {
    w.start();
}
// You probably need to make this a (private final) field
Object lock = new Object();

// later
synchronized (lock) {
    for(int i = 0; i < n; i++) {
        Worker currThread = new Worker(someArgs);
        workerThreads.add(currThread);
        w.start();
    }
}

// later still
public void actionPerformed(ActionEvent arg0) {
    synchronized (lock) {
        // interruption code here
    }
}