![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 81
君 莫 笑
IT新人
展开
-
两个线程交替打印数字(六种方法,总有一款适合你)
今天脑子里突然冒出这个问题,于是自己写了下。方法1:利用volatile进行同步volatile是可以同步的,这个关键字保证了内存可见性。那么只要你的操作是原子的就可以保证线程安全。什么叫原子的呢?falg = false;这种就属于原子的。而i++这种不属于原子操作。所以我们思路如下:利用一个volatile修饰的变量,控制线程调度。代码如下:public class Test2 { static int i = 1; static volatile boo原创 2021-08-26 00:48:36 · 4457 阅读 · 2 评论 -
Thread.sleep()为什么要抛出中断异常
当然是为了让你的代码具有响应中断信号的能力!目录从场景说起响应中断关闭线程池从场景说起假设sleep()方法不抛出中断异常,也就是线程没有中断响应能力,会怎么样?考虑如下场景:线程A:sleep中线程B:A别睡了,要关机啦(向A发送中断信号)线程A:sleep中这样好吗?这不好。因为线程A对外界情况没有感知能力。中断就起到了这样的作用:让线程具有感知的能力。sleep(),wait()等方法都需要你去处理中断异常,也就是需要你的代码能够响应中断。响应中断原创 2021-08-22 12:00:25 · 10168 阅读 · 0 评论 -
趣谈IllegalMonitorStateException——notify()/notifyAll()与wait()的用法
多半是在wait()和notify()的使用中产生的吧?如果是,请接着往下读。那么本文谈谈如何正确使用notify()/notifyAll()和wait(),理解了原理,再去修改你的代码肯定就没错了。首先明确以下结论:(可以跳过,直接看底下小女孩的故事)1.synchronized(A)可以锁住对象A,也就是拿到对象A的对象锁(monitor锁),使A在任意时刻只被一个线程拥有。什么是对象锁呢?简单理解就是每个对象都有一把锁,这个锁在同一时刻只能被一个线程占有,哪个线程拿到就是谁的。很像原创 2021-08-08 10:52:43 · 335 阅读 · 0 评论