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