JAVASE
文章平均质量分 77
君 莫 笑
IT新人
展开
-
两个线程交替打印数字(六种方法,总有一款适合你)
今天脑子里突然冒出这个问题,于是自己写了下。方法1:利用volatile进行同步volatile是可以同步的,这个关键字保证了内存可见性。那么只要你的操作是原子的就可以保证线程安全。什么叫原子的呢?falg = false;这种就属于原子的。而i++这种不属于原子操作。所以我们思路如下:利用一个volatile修饰的变量,控制线程调度。代码如下:public class Test2 { static int i = 1; static volatile boo原创 2021-08-26 00:48:36 · 5227 阅读 · 2 评论 -
Thread.sleep()为什么要抛出中断异常
当然是为了让你的代码具有响应中断信号的能力!目录从场景说起响应中断关闭线程池从场景说起假设sleep()方法不抛出中断异常,也就是线程没有中断响应能力,会怎么样?考虑如下场景:线程A:sleep中线程B:A别睡了,要关机啦(向A发送中断信号)线程A:sleep中这样好吗?这不好。因为线程A对外界情况没有感知能力。中断就起到了这样的作用:让线程具有感知的能力。sleep(),wait()等方法都需要你去处理中断异常,也就是需要你的代码能够响应中断。响应中断原创 2021-08-22 12:00:25 · 10681 阅读 · 0 评论 -
HashMap为什么线程不安全
HashMap由数组、链表、红黑树组成。在put操作的时候,会形成环,所以线程不安全。JDK1.7中,HashMap在resize的时候采用头插法,而JDK1.8之后采用尾插(并且引入了红黑树,还未看源码,暂时不讨论)。下面直接上JDK1.7的源码,扩容的时候:(其实很简单,你想想怎么把一个节点插入到链表头?)void transfer(Entry[] newTable, boo...原创 2019-12-04 20:27:13 · 205 阅读 · 0 评论 -
使用wait(),两个线程交替执行
方法1:忘记从哪看的了,设计得比较繁琐。class Num{ int i = 1; boolean flag = false;}public class TestXX { public static void main(String[] args) { Num num = new Num(); new Thread(new Runnable() { @O...原创 2019-11-14 19:44:45 · 416 阅读 · 0 评论 -
JRE和 JDK的区别
参考地址:https://blog.csdn.net/qq_21808961/article/details/80647551 首先要谈到JVM,JVM就是解释执行java字节码文件的一个软件。 JRE:运行java代码所必需的。包括JVM和核心类库。因为JVM解释字节码文件时,需要核心类库的支持,不然读不懂(个人理解) JDK:包括JRE+JAVA开发工具(用来编译java代码...转载 2019-07-18 21:30:42 · 160 阅读 · 0 评论