摘要: 1、运行结果错误。 比如 i++ 操作,表面上看只是一行代码,但实际上它并不是一个原子操作,它的执行步骤主要分为三步,而且在每步操作之间都有可能被打断。 第一个步骤是读取;第二个步骤是增加;第三个步骤是保存。 public class WrongResult { public static void 阅读全文
posted @ 2020-06-27 17:06 王晓天 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 1、使用 BlockingQueue ArrayBlockingQueue 完成了很多工作,比如队列满了就去阻塞生产者线程,队列有空就去唤醒生产者线程等。 import java.util.concurrent.*; public class MyProdCons { public static v 阅读全文
posted @ 2020-06-27 15:09 王晓天 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 相同点:它们都可以让线程阻塞。它们都可以响应 interrupt 中断:在等待的过程中如果收到中断信号,都可以进行响应,并抛出 InterruptedException 异常。 不同点:wait 方法必须在 synchronized 保护的代码中使用,而 sleep 方法并没有这个要求。在同步代码中 阅读全文
posted @ 2020-06-27 09:40 王晓天 阅读(425) 评论(0) 推荐(0) 编辑