- 博客(5)
- 收藏
- 关注
原创 futureTask
FutureTask可以把它当作是闭锁的一种(FutureTask的实现描述了一个抽象的可携带结果的计算)。FutureTask的通过Callable实现的(带返回值的Runnable),并且有3个状态:等待、运行和完成。完成包括:正常结束、取消和异常。一旦FutureTask进入完成状态,它会永远停止在这个状态上。boolean cancel(boolean mayInterru
2018-01-24 22:49:39 148
原创 ExecutorCompletionService
ExecutorCompletionService当你需要使用Executor执行一个批量处理的任务,并且希望有返回值时,可能会使用Future不断的判断是否已经完成。现在有一个更好的方案就是CompletionService,它整合了Executor和BlockingQueue的功能。Future submit(Callable task);Future take() throw
2018-01-24 22:47:57 288
原创 CyclicBarrier
CyclicBarrier类似于闭锁,它能够阻塞一组线程直到某个事件发生。它与闭锁主要的区别在于,所有线程必须同时到达一个点,才能继续执行。闭锁等待的是事件,是等待countDown()执行之后,之前等待的线程才可能继续执行。栅栏是线程之间相互等待,然后同时到达一个点后在一起执行(可以中断、超时)。public CyclicBarrier(int parties) {
2018-01-24 22:47:11 117
原创 CountDownLatch
一个概念闭锁一个闭锁就像一道大门,直到闭锁达到终点状态之前,门一直是关闭的,没有线程可以通过,在到达终点状态时,门是打开的,允许所有线程通过。CountDownLatch是一种同步工具|是一个灵活的闭锁,允许一个或多个线程等待一个或一组事件的发生。构造器方法中提供的数值实际上就是闭锁需要等待的线程数量,这个计数器值只能被设置一次,而CountDwonLatch没有提供任何机制去重新设置
2018-01-24 22:46:30 114
原创 乐观所、悲观锁
悲观锁具有排他性,在读取数据后,会在这条数据上加锁,其他用户是操作不了这条数据的。一般用于事务较短,并发不大的场景。乐观锁其实是一种思想,每次读取数据的时候不会加锁,但是在进行更新操作的时候,需要判断在次之前数据是否被更改过(可以使用版本号等方法),如果数据已经被更改了则拒绝本次更新操作,在最新的数据之后进行重试。例如:使用自增长的整数表示数据版本号。更新时
2018-01-24 22:45:18 139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人