![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
Ming339456
李先生的笔记
展开
-
多线程-阻塞队列
概念、生产者消费者模式1)当队列满的时候,插入元素的线程被阻塞,直达队列不满。2)队列为空的时候,获取元素的线程被阻塞,直到队列不空。生产者和消费者模式生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生...原创 2019-04-03 19:56:36 · 412 阅读 · 0 评论 -
多线程-并发容器ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet
ConcurrentHashMapHashmap多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。HashTable使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法,其他线程也访问Hash...原创 2019-04-03 18:48:04 · 1102 阅读 · 0 评论 -
多线程-排他锁、读写锁实战,性能对比
排他锁:synchronized和ReentrantLock都是排他锁,排他锁的意思就是在这一时刻只能有一个线程进入读写锁:ReentrantReadWriteLock同一时刻允许多个读线程同时访问,但是写线程访问的时候,所有的读和写都被阻塞,最适宜与读多写少的情况由于用户大部分的请求都是读,所以可以认为读写锁的效率比排他锁是质的飞跃我们使用Synchronized实现一次和读写锁...原创 2019-04-02 23:50:58 · 758 阅读 · 0 评论 -
多线程-内置锁、显式锁、公平锁、非公平锁
synchronized :代码简洁,隐式支持可重新获得锁synchronized就不实现了,大家可以自行尝试Lock:获取锁可以被中断,超时获取锁,尝试获取锁Lock锁的运用更加灵活这里我们用可重入锁的实例来实现:Lock lock = new ReentrantLock();(注意,这里我们可以观察ReentrantLock里面)这一段话意味着,我们在构造锁实例的时候...原创 2019-04-02 23:03:52 · 827 阅读 · 0 评论 -
多线程-CAS
CAS(Compare And Swap)原理:如果地址V上的值和期望的值A相等,就给地址V赋给新值B,如果不是,不做任何操作,这里本来是两个操作,但实现上为CAS提供了一个指令,这个指令我们就称之为CAS指令,这就从cpu级别上保证了它是一个原子操作实现:一般实现实在循环里面进行无限CAS操作,我们也可以称之为自旋锁,但由此可以衍生出几个问题问题一:ABA问题我们地址V,原来是A...原创 2019-04-02 20:07:19 · 156 阅读 · 0 评论 -
多线程-Callable和FutureTask 使用
FutureTask主要用来包装Callable实现,启动线程不能直接使用Callable.start,具体使用如下:/** *类说明:演示Future等的使用 */public class UseFuture { /*实现Callable接口,允许有返回值*/ private static class UseCallable implements Callable<In...原创 2019-04-02 18:47:38 · 224 阅读 · 0 评论 -
多线程-Exchange线程之间的数据交换
方法为exchange.exchange(要替换的值):(注:只能两个线程替换)/** *类说明:Exchange的使用,两个线程之间的数据交换(注:只能两个线程,所以很局限) */public class UseExchange { private static final Exchanger<Set<String>> exchange =...原创 2019-04-02 18:28:01 · 687 阅读 · 0 评论 -
多线程-演示Semaphore用法,一个数据库连接池的实现
我们创建三个类:SqlConnectImpl、DBPoolSemaphore 、Test/** *类说明:数据库连接的简单实现,这里只实现fetchConnection()方法 */public class SqlConnectImpl implements Connection{ /*拿一个数据库连接*/ public static final Connection f...原创 2019-04-02 17:51:39 · 387 阅读 · 0 评论 -
多线程-CountDownLatch和CyclicBarrier使用
CountDownLatch latch = new CountDownLatch(6):6:代表初始扣除点,为零则继续执行,可以自行设置latch.countDown():表示扣除点-1latch.await():阻塞线程,直至我们的扣除点为零才会唤醒线程,这里使用需要注意/** *类说明:演示CountDownLatch,模拟5个初始化的线程,6个扣除点(注:一个线程可以执...原创 2019-04-02 16:31:19 · 115 阅读 · 0 评论 -
多线程-ForkJoin框架实战
一、Fork/Join的同步用法同时演示返回结果值我们先创建一组模拟业务的类,如下:/** *产生一组整形数组,模拟统计业务 */public class TestArray { //数组长度 public static final int ARRAY_LENGTH = 3000; public static int[] testArray() { ...原创 2019-04-02 15:48:53 · 277 阅读 · 0 评论