So let’s say I’m creating and starting a bunch of threads in a for loop, that is being executed in the run method of a launcher thread. Let’s also say that I want to be able to interrupt the launcher thread and all threads that the thread has created, and I do this through a button.
So something like this –
try{
for(int i = 0; i < n;i++){
Worker currThread = new Worker(someArgs);
workerThreads.add(currThread);
currThread.start();
}
} catch (InterruptedException e){
e.printStackTrace();
}
BUTTON-
public void actionPerformed(ActionEvent arg0) {
List<Worker> threads = launchThread.getWorkerThreads();
for(int i = 0; i < threads.size();i++){
threads.get(i).interrupt();
}
launchThread.interrupt();
}
Now, let’s say that I want to make it so that the interrupts cannot occur at the same time as thread creation. I think a way to do this would be to construct a dummy object and put both pieces of code inside a lock
synchronized(dummyObject){
//thread creation or interruption code here (shown above)
}
Will this way work? I ask because I’m not sure how to test to see if it will.
Start the threads separately from creating them.
If that’s still not enough, your
dummyObjectsynchronization should work just fine.