- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
书中Java Concurrency in Practice
第7章,第142、143页,我不太明白2句话:
public void cancel() { interrupt(); }
这可以由任何其他代码调用!!我正在寻找清晰、清晰且完整的代码来说明上述两点。
最佳答案
您所询问的示例是在 JDK 本身中提供的:)。看看ThreadPoolExecutor::shutdown
public void shutdown() {
final ReentrantLock mainLock = this.mainLock;
mainLock.lock();
try {
checkShutdownAccess();
advanceRunState(SHUTDOWN);
interruptIdleWorkers();
onShutdown(); // hook for ScheduledThreadPoolExecutor
} finally {
mainLock.unlock();
}
tryTerminate();
}
1 ThreadPoolExecutor
的线程 (ThreadPoolExecutor::Worker::thread
) 专属于ThreadPoolExecutor
实例。
ThreadPoolExecutor::shutdown
不会公开有关其运行的线程以及如何关闭它们的任何详细信息。它所保证的是
Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be accepted.
2 当然,您可以提供一个 ThreadFactory
来发射带有重写 interrupt
方法的线程,如下所示:
public void BadThread extends Thread{
public BadThread(Runnable r){
super(r);
}
@Override
public void interrupt(){
throw new IllegalArgumentException();
}
}
但这将是一场灾难,因为 ThreadPoolExecutor
不知道您的中断策略(抛出 IllegalArgumentException
)。并且根据其实现 interruptIdleWorkers
方法或 runWorker
(当发现当前状态为 SHUTDOWN
,但工作线程尚未中断时)在以下情况下会失败:打扰 worker 。
因此以下程序可能(检索任务和关闭之间存在一些竞争)永远不会终止:
public static void main(String[] args) {
ThreadFactory tf = BadThread::new;
ExecutorService es = Executors.newFixedThreadPool(8, tf);
es.submit(() -> System.out.println("Test"));
es.submit(() -> System.out.println("Test")); // I added this entry because of
// shutdown() and runWorker() are
// kind of racy and
es.shutdown();
}
关于java - 线程中断-JCIP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51062363/
书中Java Concurrency in Practice第7章,第142、143页,我不太明白2句话: “线程应该被其所有者中断”。-然而,在第 141 页,一个扩展 Thread 的类已经暴露
在JCIP我们有一段代码如下所示: list 4.2: @ThreadSafe public class PersonSet { @GuardedBy("this") private
Brian Goetz 等人在 Java Concurrency in Practice 中提供了以下示例(缩短了 list 4.11)。 public class SafePoint { priva
在此code public class NoncancelableTask { public Task getNextTask(BlockingQueue queue) { b
最近阅读了 JCIP 注释,它们看起来很酷。去了该网站并查看了源代码。唯一的问题是 src jar 只包含注释...我没有看到在哪里可以找到实际上做任何事情的注释处理器!我是不是看错地方了,或者这些不
升级gradle(也是gms)后,我出现了错误 程序类型已经存在:net.jcip.annotations.GuardedBy 消息{种类=错误,文本=程序类型已存在:net.jcip.annotat
我想在我的 Java 代码中使用 @net.jcip.annotations.NotThreadSafe。我试图导入它是项目的 pom.xml 中的依赖项,如下所示。但是,我仍然收到错误消息:我的导入
JCIP将 protected 对象定义为: Guarded. A guarded object can be accessed only with a specific lock held. Gua
我正在实践中阅读java concuremcy。现在我达到了9.1章。但我没有在java上开发GUI应用程序。 引自书中: Why are GUIs Single-threaded? In the o
很多人读过《Java并发实践》,但为了方便起见,将代码粘贴到这里。 5.19 Memoizer 最终实现: public class Memoizer implements Computable {
我是一名优秀的程序员,十分优秀!