这是java高并发系列第15篇文章 Semaphore(信号量)为多线程协作提供了更为强大的控制方法,前面的文章中我们学了synchronized和重入锁ReentrantLock,这2种锁一次都只能允许一个线程访问一个资源,而信号量可以控制有多少个线程可以访问特定的资源。 Semaphore常用场 ...
分类:
编程语言 时间:
2019-07-22 09:22:26
阅读次数:
114
除了用Synchronized关键字修饰同步块,让线程获取某对象的锁实现多线程操作共享变量的同步外,还可以使用java.util.concurrent包。并且,juc包机制下的同步更灵活。juc包的所有锁都实现自Lock接口和ReadWriteLock接口,下面分别总结。 (图片来源于网络) Loc ...
分类:
其他好文 时间:
2019-07-20 17:21:47
阅读次数:
313
java juc 包下面已经提供了很多并发锁工具供我们使用,但在日常开发中,为了各种原因我们总是会用多线程来并发处理一些问题,然而并不是所有的场景都可以使用juc 或者java本身提供的锁来方便的帮助我们控制多线程带来的并发问题,这个时候就需要我们根据自己的业务场景来子实现定制一把我们自己专属的锁, ...
分类:
编程语言 时间:
2019-07-14 19:29:16
阅读次数:
97
一、创建线程 二、Future jdk8之前的实现方式,在JUC下增加了Future,从字面意思理解就是未来的意思,但使用起来却着实有点鸡肋,并不能实现真正意义上的异步,获取结果时需要阻塞线程,或者不断轮询。 三、CompletableFuture 使用原生的CompletableFuture实现异 ...
分类:
编程语言 时间:
2019-07-13 19:58:14
阅读次数:
131
012-多线程-JUC集合-Queue-SynchronousQueue和LinkedTransferQueue ...
分类:
编程语言 时间:
2019-07-04 14:36:10
阅读次数:
142
011-多线程-JUC集合-Queue-PriorityBlockingQueue和DelayQueue ...
分类:
编程语言 时间:
2019-07-04 14:10:48
阅读次数:
201
想让多个线程有序执行,必须提供它们之间的唤醒机制。下面以三个线程为例,有序打印自己的线程ID Condition condition1 = lock.newCondition(); //代表线程1的唤醒 Condition condition2 = lock.newCondition(); //代表 ...
分类:
编程语言 时间:
2019-07-03 16:59:55
阅读次数:
135
一、概述 Semaphore是一个计数信号量。从概念上将,Semaphore包含一组许可证。如果有需要的话,每个acquire()方法都会阻塞,直到获取一个可用的许可证。每个release()方法都会释放持有许可证的线程,并且归还Semaphore一个可用的许可证。然而,实际上并没有真实的许可证对象 ...
分类:
编程语言 时间:
2019-06-20 14:20:52
阅读次数:
148
AQS是JUC锁框架中最重要的类,通过它来实现独占锁和共享锁的。本章是对AbstractQueuedSynchronizer源码的完全解析,分为四个部分介绍: CLH队列即同步队列:储存着所有等待锁的线程 独占锁 共享锁 Condition条件 注: 还有一个AbstractQueuedLongSy ...
分类:
其他好文 时间:
2019-06-19 20:25:53
阅读次数:
95
一、概述 Java中的锁,可以分为"同步锁"和"JUC包中的锁"。 1.1、同步锁 即通过synchronized关键字来进行同步,实现对竞争资源的互斥访问的锁。Java 1.0版本中就已经支持同步锁了。 同步锁的原理是,对于每一个对象,有且仅有一个同步锁;不同的线程能共同访问该同步锁。但是,在同一 ...
分类:
编程语言 时间:
2019-06-19 20:18:49
阅读次数:
171