并发编程Concurrent
harris135
这个作者很懒,什么都没留下…
展开
-
JAVA四种线程池的使用
Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。 newS...转载 2018-04-08 17:14:05 · 125 阅读 · 0 评论 -
两个线程进行数据交换的Exchanger
两个线程进行数据交换的Exchanger简介Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据, 如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生...转载 2018-04-10 17:11:54 · 247 阅读 · 0 评论 -
同步屏障CyclicBarrier
简介CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉Cyc...转载 2018-04-10 17:05:29 · 172 阅读 · 0 评论 -
控制并发线程数的Semaphore
控制并发线程数的Semaphore简介 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。很多年以来,我都觉得从字面上很难理解Semaphore所表达的含义,只能把它比作是控制流量的红绿灯,比如XX马路要限制流量,只允许同时有一百辆车在这条路上行使,其他的都必须在路口等待,所以前一百辆车会看到绿灯,可以开进这条马路,后面的...转载 2018-04-10 16:36:54 · 287 阅读 · 0 评论 -
Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析
Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析原文出处: FormatJava中的阻塞队列接口BlockingQueue继承自Queue接口。BlockingQueue接口提供了3个添加元素方法。add:添加元素到队列里,添加成功返回true,由于容量满了添加失败会抛出IllegalStateException异常offer:添加元素到队列...转载 2018-04-10 14:29:44 · 216 阅读 · 0 评论 -
Java线程的5种状态及切换(透彻讲解)
Java中的线程的生命周期大体可分为5种状态。1. 新建(NEW):新创建了一个线程对象。2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3. 运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代...转载 2018-04-10 14:01:34 · 231 阅读 · 0 评论 -
理解线程池的原理
转至:https://blog.csdn.net/mine_song/article/details/70948223读完本文你将了解:什么是线程池线程池的处理流程保存待执行任务的阻塞队列创建自己的线程池JDK 提供的线程池及使用场景newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduledThreadPool两...转载 2018-04-10 11:54:33 · 168 阅读 · 0 评论 -
ReenTrantLock可重入锁 和synchronized的区别
ReenTrantLock可重入锁(和synchronized的区别)总结可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。 锁的实现:Synchronized是依赖于JVM实现的,而ReenTran...转载 2018-04-10 11:38:44 · 395 阅读 · 0 评论 -
ThreadLocal的一些学习理解
ThreadLocal1、 多线程同时访问统一共享属性的时候产生的线程安全问题的一种解决方案,适用于每个线程对这个共享属性的修改都不会影响到其他线程,即不需要线程间通信的这种情况;这样做是为了避免使用同步锁导致的效率问题(每个线程各创建一个共享数据的副本分别服务于各自的线程);2、 每个Thread内部有两个类似Map的属性ThreadLocalMap,通过Thread.currentThread...原创 2018-04-10 10:01:30 · 162 阅读 · 0 评论 -
Semaphore实现原理分析
synchronized的语义是互斥锁,就是在同一时刻,只有一个线程能获得执行代码的锁。但是现实生活中,有好多的场景,锁不止一把。比如说,又到了十一假期,买票是重点,必须圈起来。在购票大厅里,有5个售票窗口,也就是说同一时刻可以服务5个人。要实现这种业务需求,用synchronized显然不合适。查看Java并发工具,发现有一个Semaphore类,天生就是处理这种情况的。先用Semaphore实...转载 2018-04-09 11:51:13 · 190 阅读 · 0 评论 -
Java中CountDownLatch,CyclicBarrier以及Semaphore的使用场景
1.CountDownLatchCountDownLatch一般是用于某个线程等待其他线程执行完之后,它才能执行,构造方法参数指定了计数的次数,countDown方法,当前线程调用此方法,则计数减一 ,awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0;代码示例转至:https://blog.csdn.net/chenchaofuck1/article/details/515967...原创 2018-04-08 17:28:05 · 363 阅读 · 0 评论 -
什么是 CAS 机制?
示例程序:启动两个线程,每个线程中让静态变量count循环累加100次。[java] view plain copypublic class TestThreadAtomic { private static Integer count = 0; public static void main(String[] args) { for(int i = 0 ; ...转载 2018-04-17 11:39:33 · 237 阅读 · 0 评论