![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
concurrent
ploter
背上梁山
展开
-
synchronized和lock的区别
ReentrantLock在加锁和内存上提供的语义与内置锁相同,林外它提供了一些其他功能,包括定时的锁等待、可中断的锁等待、公平性,以及实现非块结构的加锁。 与显示锁相比,内置锁仍然具有很大的优势。内置锁为许多开发人员所熟悉,并且简洁紧凑。ReentrantLock的危险性比同步机制要高,如果忘记在finally块中调用unlock,,虽然代码表面能正常运行,但实际上已经埋下了一课定时炸弹。 ...转载 2018-07-19 21:41:45 · 169 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier的区别
CountDownLatch作用:一个或多个线程,等待另外一个或多个线程完成某件事情后才能继续执行 CyclicBarrier作用:多个线程之间相互等待,任何一个线程完成之前,所有线程都必须等待。 CountDownLatch的主要弊端是计数不可重置,所以想要有N个屏障就要有N个CountDownLatch对象,是比较复杂的 而CyclicBarrier是可以重置计数的。...转载 2018-07-25 20:44:33 · 145 阅读 · 0 评论 -
线程池ThreadPoolExecutor的介绍
线程池最常用的构造方法是 ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) corePoolSize:池中所保存的线程数,就是核心池的大小。 maximumPoolSize:...转载 2018-08-11 23:25:50 · 136 阅读 · 0 评论 -
多线程单例模式的实现
public class MyObject { private static MyObject myObject; private MyObject() { } synchronized public static MyObject getInstance() { try { if (myObject != null) { } else { // 模拟在...原创 2018-08-12 14:55:12 · 625 阅读 · 0 评论 -
ThreadLocal源码分析
首先来看ThreadLocal两个最重要的方法,set()和get()。 public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, ...原创 2018-08-13 17:02:30 · 104 阅读 · 0 评论