![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
文章平均质量分 83
线程池
屁颠屁颠过日子
这个作者很懒,什么都没留下…
展开
-
并发 - 常见面试题
当多个线程同时访问一段同步代码时,首先会进入 _EntryList 集合,当线程获取到对象的monitor 后进入 _Owner 区域并把monitor中的owner变量设置为当前线程,同时monitor中的计数器count加1,若线程调用 wait() 方法,将释放当前持有的monitor,owner变量恢复为null,count自减1,同时该线程进入 _WaitSet集合中等待被唤醒。偏向锁状态:当一个线程访问一个没有竞争的锁时,会将对象头中的标记位设置为偏向锁状态,并将线程ID记录在对象头中。原创 2024-04-03 16:14:08 · 1039 阅读 · 0 评论 -
并发 - 锁机制
乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源是否被其它线程修改了。一般使用版本号机制或 CAS 算法,在 Java 中java.util.concurrent.atomic包下面的原子变量类(比如AtomicInteger、LongAdder)就是使用了乐观锁的一种实现方式 CAS 实现的。版本号机制。原创 2024-04-03 16:01:45 · 955 阅读 · 0 评论 -
哲学家问题
描述:五个哲学家围着一张圆桌,每个哲学家面前放着食物。哲学家的生活有两种交替活动:吃饭思考。当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子。解决1:至多只允许四个哲学家同时进餐,以保证至少有一个哲学家能够进餐,最终总会释放出他所使用过的两支筷子,从而可使更多的哲学家进餐。设置一个信号量room,使其初始值为4,在哲学家拿起他左边的筷子之前,先对信号量做一次P操作,...原创 2020-05-06 13:53:19 · 174 阅读 · 1 评论 -
并发 -- ThreadLocal
ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,可以使用 get() 和 set() 方法来获取默认值或将其值更改为当前线程所存的副本的值。内存泄漏:如果把ThreadLocal置为null,...原创 2020-03-11 10:27:29 · 98 阅读 · 1 评论 -
并发 -- 常见关键字
1. synchronized 关键字synchronized锁住的是对象,而不是代码。对于非static的synchronized方法,锁的就是对象本身也就是this。synchronized(Sync.class)和static synchronized方法实现了全局锁的效果。作用类的所有实例注1:synchrnoized锁是可重入的。子类也可调用父类的同步方法,每次重入,monitor中...原创 2020-05-06 13:38:17 · 378 阅读 · 1 评论 -
并发--常见并发容器
一 JDK 提供的并发容器总结JDK 提供的这些容器大部分在 java.util.concurrent 包中。ConcurrentHashMap: 线程安全的 HashMapCopyOnWriteArrayList: 线程安全的 List,在读多写少的场合性能非常好。ConcurrentLinkedQueue: 高效的并发队列,使用链表实现。可以看做一个线程安全的 LinkedList,...原创 2020-05-06 13:48:39 · 238 阅读 · 0 评论 -
并发 -- 线程池
使用线程池的好处:降低资源消耗,提高响应速度,提高线程的可管理性。1. Executor 框架结构(主要由三大部分组成)(1) 任务(Runnable /Callable)执行任务需要实现的 Runnable 接口 或 Callable接口。两者比较:Runnable: 无返回值,不能抛出异常,其内部只有一个方法:void run()Callable: 有返回值,可抛出异常,其内部只...原创 2020-03-11 10:43:59 · 231 阅读 · 1 评论