gpt4 book ai didi

java - 中断正在运行的线程

转载 作者:行者123 更新时间:2023-11-30 07:18:30 28 4
gpt4 key购买 nike

我只是在使用线程中断临时取消线程。虽然在我的代码中两个线程都停止了,但看起来我没有捕捉到 InterruptedException 我只是想知道为什么?

制作人:

public class Producer implements Runnable{

private BlockingQueue<String> queue ;

public Producer(BlockingQueue<String> queue) {
this.queue = queue;
}

@Override
public void run() {
try {

while (!Thread.currentThread().isInterrupted()){
queue.put("Hello");
}
}catch (InterruptedException e) {
System.out.println("Interupting Producer");
Thread.currentThread().interrupt();
}
}
}

消费者:

public class Consumer implements Runnable {

BlockingQueue<String> queue;

public Consumer(BlockingQueue<String> queue) {
super();
this.queue = queue;
}

@Override
public void run() {

String s;
try {
while (!Thread.currentThread().isInterrupted()) {
s = queue.take();
System.out.println(s);
}
} catch (InterruptedException e) {
System.out.println("Consumer Interupted");
Thread.currentThread().interrupt();
}
}
}

现在主要是:

public static void main(String[] args) {
BlockingQueue<String> queue = new LinkedBlockingQueue<String>();

Thread producerThread = new Thread(new Producer(queue));
Thread consumerThread = new Thread(new Consumer(queue));
producerThread.start();
consumerThread.start();

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
} finally {
producerThread.interrupt();
consumerThread.interrupt();
}
}

虽然线程停止了,但我无法理解为什么 InterruptedException 不是咳咳。它应该在 catch block 中打印中断消息,但没有打印任何内容

最佳答案

您有一个无界队列,因此生产者和消费者都不会在队列中阻塞。因此,任何可能抛出 InterruptedException 的操作都不会被中断。

关于java - 中断正在运行的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15323762/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com