摘要: Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据, 如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange,当两个 阅读全文
posted @ 2018-11-19 18:20 那股泥石流 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 先做总结: 1、Semaphore是什么? Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。 把它比作是控制流量的红绿灯,比如XX马路要限制流量,只允许同时有一百辆车在这条路上行使,其他的都必须在路口等待,所以前一百辆车会看到绿灯,可以 阅读全文
posted @ 2018-11-19 17:31 那股泥石流 阅读(641) 评论(0) 推荐(0) 编辑
摘要: 先做总结: 1、CountDownLatch 是什么? CountDownLatch 允许一个或多个线程等待其他线程(不一定是线程,某个操作)完成之后再执行。 CountDownLatch的构造函数接收一个int类型的参数作为计数器,如果你想等待N个点完成,这里就传入N。 当我们调用一次CountD 阅读全文
posted @ 2018-11-19 15:57 那股泥石流 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 先做总结 1、CyclicBarrier 是什么? CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到要求的线程到达都屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。 2、Cycl 阅读全文
posted @ 2018-11-19 12:02 那股泥石流 阅读(464) 评论(0) 推荐(0) 编辑
摘要: 一、Unsafe Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作。 这个类尽管里面的方法都是public的,但是并没有办法使用它们,JDK API文档也没有提供任何关于这个类的方 阅读全文
posted @ 2018-11-16 16:06 那股泥石流 阅读(515) 评论(0) 推荐(0) 编辑
摘要: 先做总结: 1、为什么使用Condition条件? synchronized配合Object的wait()、notify()系列方法可以实现等待/通知模式。 Lock提供了条件Condition,对线程的等待、唤醒操作更加详细和灵活。 Condition的作用是对锁进行更精确的控制。Conditio 阅读全文
posted @ 2018-11-16 11:46 那股泥石流 阅读(662) 评论(0) 推荐(0) 编辑
摘要: 先做总结: 1、为什么用读写锁 ReentrantReadWriteLock? 重入锁ReentrantLock是排他锁,在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少。然而读服务不存在数据竞争问题,如果一个线程在读时禁止其他线程读势必会导致 阅读全文
posted @ 2018-11-13 18:04 那股泥石流 阅读(607) 评论(0) 推荐(0) 编辑
摘要: 先做总结: 1、为什么要用ReentrantLock? (1)ReentrantLock与synchronized具有相同的功能和内存语义; (2)synchronized是重量级锁,性能不好。ReentrantLock性能好; (3)ReentrantLock可操作性强,如:实现条件Conditi 阅读全文
posted @ 2018-11-09 14:15 那股泥石流 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 先做总结: 1、AbstractQueuedSynchronizer是什么? AbstractQueuedSynchronizer(AQS)这个抽象类,是Java并发包 java.util.concurrent 的基础工具类,是实现 ReentrantLock、CountDownLatch、Sema 阅读全文
posted @ 2018-11-08 18:24 那股泥石流 阅读(574) 评论(0) 推荐(0) 编辑
摘要: Java对象的创建过程包括 类初始化(JVM类加载机制)和类实例化两个阶段。 一、Java对象创建时机 (1)使用new关键字创建对象 (2)反射创建对象 使用Class类的newInstance方法 Student student2 = (Student)Class.forName("Studen 阅读全文
posted @ 2018-11-05 20:09 那股泥石流 阅读(3837) 评论(0) 推荐(0) 编辑