![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java多线程
文章平均质量分 59
swallowflytop
一位码农,一位全栈工程师
展开
-
理解java的ReetrantLock
关于java多线程并发控制,除了内置关键字synchronized外,还有lock,lock的一个实现类就是ReetrantLock,Lock可以实现更灵活的多线程并发控制。如何使用,举个栗子public class ReetrantLockDemo { static final Lock lock = new ReentrantLock(); static Runnable run原创 2016-11-12 13:10:49 · 1038 阅读 · 0 评论 -
理解java读写锁 ReadWriteLock
如果说ReetrantLock是一种互斥锁的话,那么还有一种锁叫读写锁ReadWriteLock。通俗点说,互斥锁相当一个线程持有这个锁以后,其他任何线程都不能再获取这个锁了,但可以设想2个线程对一个公共内容读写的场景,如果一个线程对公共内容进行写操作,那么另一个线程这不能读也不能写这个内容,但如果一个线程对公共内容进行读操作,那实际应该允许另个一线程对该内容进行读操作,但禁止写操作,即读-读允许,原创 2016-11-12 13:49:58 · 354 阅读 · 0 评论 -
理解java的 CountDownLatch 和 CyclicBarrier
所谓CountDownLatch,字面理解就是计数,然后闭锁,所谓闭锁,就是在闭锁到达结束状态之前,这扇门一直是关闭着的,不允许任何线程通过,当到达结束状态时,这扇门会打开并允许所有的线程通过。举个栗子说明,比如两个任务,任务一可以并发进行,任务二则要等到至少2个任务一完成后才能开始public class CountDownLatchDemo { static final CountDown原创 2016-11-12 14:29:41 · 700 阅读 · 0 评论 -
理解java的CompletionService
CompletionService是JAVA多线程工具箱中个又一大利器,这个东西用来解决什么问题合适?我一个任务,任务完成后有一个输出值,这个时候就要用到Future和Callable了,如果我同时运行2个这样的任务,然后需要在主线程中获取这2个任务的返回值。比较直观的想法就是使用一个list来保存这2个任务的Future对象,依次调用get方法来取值,但这样做有一个问题,保存在list中的5个对象原创 2016-11-12 20:11:27 · 255 阅读 · 0 评论 -
理解JAVA的Semaphore信号量
先解释下信号量要解决什么问题,打个比方,一个任务,需要从网卡读取参数,而且同一个时间只允许最多2个线程读取一个网卡的参数,现在有4个线程需要读取这个参数,那么理想情况是所有时间都有且只有2个线程在同时读取参数,这个时候就是信号量Semaphore登场了。public class CompletionServiceDemo { static final Semaphore semp = new原创 2016-11-12 20:45:13 · 298 阅读 · 0 评论 -
java常用多线程知识大全(二)
五. 线程组:JAVA中ThreadGroup表示线程组,可以在创建Thread时在构造函数中指定线程组,不指定默认为父线程的线程组。线程组提供activeCount()、interrupt()、isDaemon、setDaemon()等方法可以操作线程组中所有线程。 六. 线程异常特殊处理机制:可以通过Thread的static setDefaultUncaughtExceptionHan原创 2016-08-06 13:16:33 · 250 阅读 · 0 评论 -
JAVA常用多线程知识大全(一)
一. 创建线程方法包括: 1. 继承Thread创建后调用start()方法启动; 2. 实现runnable接口后作为Thread的target创建,调用Thread的start()方法启动; 3.实现Callable的target创建,调用Future()方法启动线程,后续可以调用get()方法获取Callable 二. 控制线程: 1. Thread的join()方法可以让当前线原创 2016-07-11 16:08:49 · 307 阅读 · 0 评论