线程
Cry丶
/*有些梦虽然遥不可及, 但却并不是不可以实现*/<br>
写博客的原因(告戒自己):
1.记录自己的成长, 是非对错10年后回望;
2.我踩过的坑,同仁们就不要再迈了;
3.开源精神 理想主义 利他主义。
展开
-
Thread.sleep()和TimeUnit.SECONDS.sleep()的区别与联系
刚看到TimeUnit.SECONDS.sleep()方法时觉得挺奇怪的,这里怎么也提供sleep方法? public void sleep(long timeout) throws InterruptedException { if (timeout > 0) { long ms = toMillis(timeout); int ns = excessNanos(timeout, ms); Thread.sleep(ms, ns); }原创 2020-12-28 21:54:26 · 372 阅读 · 1 评论 -
【多线程】伪共享
问题 (1)什么是 CPU 缓存行? (2)什么是内存屏障? (3)什么是伪共享? (4)如何避免伪共享? CPU缓存架构 CPU 是计算机的心脏,所有运算和程序最终都要由它来执行。 主内存(RAM)是数据存放的地方,CPU 和主内存之间有好几级缓存,因为即使直接访问主内存也是非常慢的。 如果对一块数据做相同的运算多次,那么在执行运算的时候把它加载到离 CPU 很近的地方就有意义了,比如一个循环计数,你不想每次循环都跑到主内存去取这个数据来增长它吧。 越靠近 CPU 的缓存越快也越小。 所以 L1 缓存很原创 2020-12-04 14:28:27 · 306 阅读 · 0 评论 -
【线程安全】深入理解Volatile和Synchronized
线程安全可以概括为三个方面:原子性、可见性和有序性。 原子性:对于涉及共享变量的操作看做一个整体,在同一时间内,只能由一个线程执行,在其它线程看来,这部分操作要么尚未开始,要么已经完成。Java中,基本类型除了long和double,其它类型变量的写操作都是原子性的。 可见性:一个线程修改了共享变量后,其它线程能够立即看见改变后的值。 有序性:即程序按照代码的先后顺序执行。我们写好的代码在执行的时候不一定是按照顺序的,因为虚拟机编译的时候,在保证输出结果不变的情况下可能对代码进行优化,也就是常说的指令重排。原创 2020-12-04 12:41:14 · 212 阅读 · 0 评论