
线程
朝阳前的黑暗
这个作者很懒,什么都没留下…
展开
-
LockFreeVector 基于AtomicReferenceArray 实现的无锁的集合
最近在学多线程,阻塞,非阻塞,其中无锁的概念引出了java.util.concurrent.atomic 包里的一些无锁对象,看到有人根据AtomicReferenceArray实现了无锁Vector代码如下:import java.util.AbstractList;import java.util.concurrent.atomic.AtomicReference;imp...原创 2020-04-30 17:19:39 · 387 阅读 · 1 评论 -
多线程并发导致CPU100%的一种原因和解决办法
在用自定义线程池的时候,遇到cpu100%,经过验证后,发现问题来源于我定义的子线程。子线程的主要功能是从任务队列(LinkedBlockingQueue)里面持续拿出任务,并且执行。以下为令CPU100的代码。private class WorkThread extends Thread { @Override public void ru...转载 2019-05-31 14:47:58 · 10785 阅读 · 0 评论 -
SimpleDateFormat 的线程安全问题
SimpleDateFormat 的作者在源码中就提到:* Date formats are not synchronized.* It is recommended to create separate format instances for each thread.* If multiple threads access a format concurrently, it must...原创 2019-03-29 20:16:04 · 207 阅读 · 0 评论 -
CountDownLatch 倒数计数器
即当前线程,等待CountDownLatch中的各子线程任务都完成后,在继续往下执行的任务下述demo新建一个倒数计数器10。每个线程计数器调用countDownLatch.countDown();倒计数一次。 主方法里,使用线程池分发了十个线程做子任务,并调用countDownLatch.await();方法等待倒计数完成。等十个子线程都完成后,倒计数为0,则主线程await...原创 2018-11-27 23:02:01 · 378 阅读 · 0 评论 -
ReadWriteLock 读写锁
对线程操作时读或者写做以区分,读就不该加以限制,都能读,写才加以限制这样才够合理。这就是读写锁的意义。 读读: 不阻塞不互斥读写:读阻塞写,写也阻塞读写写:写写互斥。获取方法如下: ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); ReentrantReadWriteLock...原创 2018-11-27 22:37:45 · 159 阅读 · 0 评论 -
semaphore 信号量
首先锁一般来说是互斥的,排他的,而信号量则指的是一种允许设定数量个线程进入的一种共享锁,但是有数量限制,当进入的个数达到上限则开始不允许其他的进入。 public void acquire()获取许可public void acquire(int i)获取多个许可public void release()释放许可public void release(int ...原创 2018-11-27 22:28:16 · 108 阅读 · 0 评论 -
Condition
Condition对于重入锁的作用,相当于object.wait object.notify 对于synchronized的作用。也是判断对一个锁是否可操作的条件。常用接口:void await() throws InterruptedException;void awaitUninterruptibly();long awaitNanos(long nanosTime...原创 2018-11-26 23:45:52 · 118 阅读 · 0 评论 -
ReentrantLock 重入锁
ReentrantLock 为synchronized替代品,JDK1.5之前,jvm没对synchronized过多优化时ReentrantLock 性能远远大于synchronized。可重入:一个线程对自己来说,是可以重复进入一个锁的,不然自己就把自己卡死了。可中断:调用lockInterruptibly()方法,即设置该锁可中断。可限时:tryLock方法可以限时多久获取锁...原创 2018-11-26 23:17:19 · 146 阅读 · 0 评论 -
LockSupport
LockSupport 是提供比较底层的挂起阻塞线程的操作原语。有点类似于suspend()。主要的接口有LockSupport .park() 顾名思义park停车,就是把一个现场挂起。LockSupport .unpark(t1) 开车启动o.o与suspend的区别就是,suspend是不建议使用的有可能废除的。且如果一个线程没有被suspend,调用resume,则会...原创 2018-11-29 22:19:20 · 177 阅读 · 0 评论 -
CyclicBarrier 循环栅栏
CountDownLatch 倒计数只有一次,倒计数到0,则结束。有时候的需求是一批一批的倒计数比如主线程没十个子线程完成一次,则主线程继续执行一次,下次又来了十个线程完成,则主线程在执行一次。循环的倒计数,则需要用到循环栅栏CyclicBarrier 。构造方法为public CyclicBarrier(int parties, Runnable barrierAction)其中...原创 2018-11-29 21:46:17 · 216 阅读 · 0 评论 -
Thread.interrupt()方法理解(转)
在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段。不但不是让线程停止运行,反而是继续执行线程的手段。对于执行一般逻辑的线程,如果调用它的interrupt()方法,那么对这个线程没有任何 影响,比如线程a正在执行: while(条件) x ++; 这样的语句,如果其它线程调...转载 2018-11-17 16:47:33 · 202 阅读 · 0 评论