假设我有一个名为T1
的线程正在持有锁,而其他线程T2
,T3
,T4
正在等待锁。现在,我想停止线程T2
,但是其他线程T3
,T4
应该仍在等待。我该如何实现?
答案 0 :(得分:0)
您可以从interrupt()
中使用Thread Class
方法,像这样
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(someTask());
t.start();
Thread.sleep(3_000);
t.interrupt();
t.join(1_000);
}
private static Runnable someTask() {
return () -> {
for (int i = 0; i < 10; i++) {
System.out.print(i);
try {
Thread.sleep(1_000);
} catch (InterruptedException e) {
break;
}
}
};
}
答案 1 :(得分:0)
您应该做的是利用T2.interrupt()
。中断将唤醒相应的线程并抛出该线程必须处理的InterruptionException
。从这里,您可以结束线程。下面让我们看一下T2
可能的Runnable
的{{1}}方法的简短示例。
run()
如果有另一个线程,可以说public void run() {
while (true) {
try {
doNonBlockingWork(); // Random code logic
doBlockingWork(); // Where the thread will attempt to get and wait for the lock
doMoreCode(); // Will never get here if interrupt is called while waiting for lock above
} catch (InterruptedException e){
Thread.currentThread().interrupt(); // Maintain Interrupt Status
break; // Finish
}
}
}
线程执行以下代码,
main
public void killSpecificThread() {
doMyLogic();
startThreads(); // All the threads begin
T2.interrupt();
doMoreLogic();
}
将被唤醒(如果它处于唤醒状态,则工作原理相同,只是没有唤醒步骤),并立即被抛出T2
。由于上面的try catch,我们可以通过完成InterruptionException
方法来处理它。