随笔分类 -  Thread

摘要:1、ABA问题 CAS 会导致“ABA问题”。 CAS 算法实现一个重要前提需要取出内存中某时刻的数据,而在下时刻比较并替换,那么在这个时间差类会导致数据的变化。 比如说一个线程 one 从内存位置 V 中取出 A,这时候另一个线程 two 也从内存中取出 A,并且 two 进行了一些操作变成了 B 阅读全文
posted @ 2020-04-18 16:11 那些年的代码 阅读(1608) 评论(0) 推荐(0)
摘要:一、Java 线程池 Java通过Executors提供四种线程池,分别为:1、newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。(线程最大并发数不可控制)2、newFixedThreadPool:创建一个定长线程池 阅读全文
posted @ 2020-04-12 08:37 那些年的代码 阅读(3201) 评论(0) 推荐(1)
摘要:lock 与 lockInterruptibly比较区别在于:lock 优先考虑获取锁,待获取锁成功后,才响应中断。lockInterruptibly 优先考虑响应中断,而不是响应锁的普通获取或重入获取。详细区别: ReentrantLock.lockInterruptibly允许在等待时由其它线程 阅读全文
posted @ 2020-03-31 17:57 那些年的代码 阅读(4766) 评论(0) 推荐(0)
摘要:它们最大本质的区别是:sleep()不释放同步锁,wait()释放同步锁.还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断;wait()可以用notify()直接唤起.sleep和wait的区别还有: 阅读全文
posted @ 2020-03-17 17:00 那些年的代码 阅读(333) 评论(0) 推荐(0)
摘要:上一篇讲述了并发包下的Lock,Lock可以更好的解决线程同步问题,使之更面向对象,并且ReadWriteLock在处理同步时更强大,那么同样,线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。 那么引入本篇的主角,Condition,Condition 将 阅读全文
posted @ 2019-09-05 17:48 那些年的代码 阅读(214) 评论(0) 推荐(0)
摘要:long base = System.currentTimeMills(); long now = 0; if(millis < 0){ throw new IllegalArgumentException("timeout value is negative"); } i... 阅读全文
posted @ 2019-06-10 18:39 那些年的代码 阅读(260) 评论(0) 推荐(0)
摘要:相信很多中高级的 Java 面试者都遇到过这个问题,很多对这个不是很清楚的肯定是一脸蒙逼。内心肯定还在质疑,i++ 居然还有线程安全问题?只能说自己了解的不够多,自己的水平有限。先来看下面的示例来验证下 i++ 到底是不是线程安全的。1000个线程,每个线程对共享变量 cou... 阅读全文
posted @ 2019-06-10 18:33 那些年的代码 阅读(402) 评论(0) 推荐(0)
摘要:你真的了解volatile关键字吗?http://blog.csdn.net/FansUnion/article/details/79495080面试题:为什么最后两行没有运行?http://blog.csdn.net/FansUnion/article/details/79... 阅读全文
posted @ 2019-06-10 18:29 那些年的代码 阅读(707) 评论(0) 推荐(0)
摘要:public class TestJoin{public static void main(String[] args){Thread t1 = new MyThread(“线... 阅读全文
posted @ 2019-06-10 18:18 那些年的代码 阅读(1130) 评论(0) 推荐(1)
摘要:要保证T1、T2、T3三个线程顺序执行,可以利用Thread类的join方法。join方法是synchronized,所以需要获取Thread的对象锁才能进入,只有获得了锁才能... 阅读全文
posted @ 2019-06-10 18:17 那些年的代码 阅读(1486) 评论(0) 推荐(0)