JAVA并发编程
木木那年
从事java相关
展开
-
JUC学习笔记(1)—ReentrantLock
import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class Ticket//资源类 类 = 实例变量+实例方法{ private int number = 30; //Lock implementations provide more extensi...原创 2018-07-31 21:27:22 · 154 阅读 · 0 评论 -
JUC学习笔记(11)—CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentHashMap
public class NotSafeDemo{ public static void main(String[] args) { Map<String,String> map = new ConcurrentHashMap<String,String>(); for (int i = 1; i <=30; i++) { new T...原创 2018-08-01 22:09:23 · 248 阅读 · 0 评论 -
JUC学习笔记(10)—线程池
public class ExecutorsDemo{ public static void main(String[] args) { ScheduledExecutorService service = Executors.newScheduledThreadPool(5); ScheduledFuture<Integer> result = null; try...原创 2018-07-31 22:06:28 · 112 阅读 · 0 评论 -
JUC学习笔记(9)—Semaphore
在信号量上我们定义两种操作:acquire(获取) 当一个线程调用acquire操作时,它要么通过成功获取信号量(信号量减1),要么一直等下去,直到有线程释放信号量,或超时。release(释放)实际上会将信号量的值加1,然后唤醒等待的线程。信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。 public class SemaphoreDemo{...原创 2018-07-31 22:04:35 · 191 阅读 · 0 评论 -
JUC学习笔记(8)—CyclicBarrier
CyclicBarrier的字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。线程进入屏障通过CyclicBarrier的await()方法。 public class CyclicBarrierDemo{ private stat...原创 2018-07-31 22:00:41 · 181 阅读 · 0 评论 -
JUC学习笔记(7)—CountDownLatch
让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。 CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞), 当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。 解释:5个同学陆续离开教室后值班同学才可以关门。也即 秦灭6国,一...原创 2018-07-31 21:57:54 · 169 阅读 · 0 评论 -
JUC学习笔记(6)—创建线程的新方法Callable接口
public class CallableDemo{ public static void main(String[] args) throws InterruptedException, ExecutionException { FutureTask<Integer> ft = new FutureTask<Integer>(new MyThread());...原创 2018-07-31 21:44:57 · 118 阅读 · 0 评论 -
JUC学习笔记(5)—ReadWriteLockDemo
一个线程写入,100个线程读取import java.util.concurrent.locks.ReentrantReadWriteLock;class MyQueue{ private Object obj; private ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(); public void ...原创 2018-07-31 21:42:20 · 103 阅读 · 0 评论 -
JUC学习笔记(4)—多线程之间按顺序调用
多线程之间按顺序调用,实现A->B->C 三个线程启动,要求如下:AA打印5次,BB打印10次,CC打印15次 接着 AA打印5次,BB打印10次,CC打印15次 。来10轮 public class ThreadOrderAccess{ public static void main(String[] args) { ShareResource s...原创 2018-07-31 21:39:34 · 314 阅读 · 0 评论 -
JUC学习笔记(3)—Lock锁
一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized方法锁的是当前对象this,被锁定后,其它的线程都不能进入到当前对象的其它的synchronized方法 加个普通方法后发现和同步锁无关换成两个对象后,不是同一把锁了,情况立刻...原创 2018-07-31 21:36:38 · 191 阅读 · 0 评论 -
JUC学习笔记(2)—线程间通信
import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class ShareData{ private int number = 0; private Lock lock = ...原创 2018-07-31 21:31:33 · 183 阅读 · 0 评论 -
ConcurrentHashMap 的分析和使用
ConcurrentHashMap 是线程安全并且高效的 HashMap。本节让我们一起研究下该容器是如何在保证线程安全的同时又能保证高效的操作。目录为什么要使用 ConcurrentHashMapConcurrentHashMap 的锁分段技术ConcurrentHashMap 的结构ConcurrentHashMap 的初始化定位 SegmentConcurre...转载 2019-03-15 10:23:34 · 253 阅读 · 0 评论