上一页 1 2 3 4 5 6 7 8 9 ··· 24 下一页
摘要: /** * 可用用phaser模拟countDownLatch * awaitAdvance方法:如果传入的参数和当前的phase相等,线程就阻塞住等待phase的值增加;否则就立即返回 */ public class PhaserTest2 { private static Random rand 阅读全文
posted @ 2019-11-19 23:05 踏月而来 阅读(203) 评论(0) 推荐(0) 编辑
摘要: Fork/Join框架:在必要的情况下,将一个大任务,进行拆分(fork) 成若干个子任务(拆到不能再拆,这里就是指我们制定的拆分的临界值),再将一个个小任务的结果进行join汇总。 采用juc包的fork/join框架 public class ForkJoinWork extends Recur 阅读全文
posted @ 2019-11-19 17:18 踏月而来 阅读(220) 评论(0) 推荐(0) 编辑
摘要: publicclass RWDictionary { private final Map<String, String> m = new TreeMap<String, String>(); private final ReentrantReadWriteLock rwl = new Reentra 阅读全文
posted @ 2019-11-18 16:44 踏月而来 阅读(146) 评论(0) 推荐(0) 编辑
摘要: (1)StampedLock邮戳锁支持三种模式,分别是:写锁,读锁,乐观读。 ReentrantReadWriteLock读写锁的缺点是在读多写少的情况下,写线程会被阻塞,写线程可能会一直抢不到锁发生饥饿现象 邮戳锁可以避免这种情况,在乐观读的时候,不会对其他的写线程阻塞,其他的线程可以获取到写锁 阅读全文
posted @ 2019-11-18 16:16 踏月而来 阅读(477) 评论(0) 推荐(0) 编辑
摘要: public class SemaphoreTest { //信号量,只允许 3个线程同时访问 private static Semaphore semaphore = new Semaphore(3); public static void main(String[] args) { Execut 阅读全文
posted @ 2019-11-18 10:05 踏月而来 阅读(295) 评论(0) 推荐(0) 编辑
摘要: exchanger用于两个线程交换数据 /** * 两个线程交换数据,A线程发送数据给B线程,B线程接受的数据和A发送的数据是同一个对象 * A will send the Object java.lang.Object@6e22e576 * B will send the Object java. 阅读全文
posted @ 2019-11-17 23:17 踏月而来 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 一个生产者和一个消费者 public class ConditionTest { private static ReentrantLock lock = new ReentrantLock(); private static Condition condition = lock.newConditi 阅读全文
posted @ 2019-11-17 23:14 踏月而来 阅读(365) 评论(0) 推荐(0) 编辑
摘要: /** * 这里只是将Semaphore包装了一下,注意当Semaphore的构造参数是1时,本身就是一个显示锁 */ public class SemaphoreLock { private final Semaphore semaphore = new Semaphore(1); public 阅读全文
posted @ 2019-11-17 15:53 踏月而来 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 有一个大小为50000的数组,要求开启5个线程分别计算10000个元素的和,然后累加得到总和 /** * 开启5个线程进行计算,最后所有的线程都计算完了再统计计算结果 */ public class Test5 { private static Random random = new Random( 阅读全文
posted @ 2019-11-16 11:24 踏月而来 阅读(573) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch复杂点的例子 public class CountDownLatchTest2 { private static Random random = new Random(System.currentTimeMillis()); static class Event { in 阅读全文
posted @ 2019-11-14 23:59 踏月而来 阅读(221) 评论(0) 推荐(0) 编辑
摘要: CountdownLatch 一个线程或者多个线程等待其他线程完成了再接着往下执行 public class CountDownLatchTest { private static ExecutorService executorService = Executors.newFixedThreadP 阅读全文
posted @ 2019-11-12 23:13 踏月而来 阅读(531) 评论(0) 推荐(0) 编辑
摘要: Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C++手动管理内存的能力,不建议使用该类 (1)Unsafe对int,long ,Object的CAS操作 public class 阅读全文
posted @ 2019-11-10 11:47 踏月而来 阅读(505) 评论(0) 推荐(0) 编辑
摘要: 利用了AtomicInteger的compareAndSet方法 public class CASLock { private AtomicInteger value = new AtomicInteger(); Thread lockThread ; public boolean tryLock( 阅读全文
posted @ 2019-11-09 21:35 踏月而来 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 对引用类型的原子性操作 /** * *对引用变量的原子操作 note: *在java中对引用类型的变量,赋值是原子性的,为什么还要有atomicReference,假如要对一个引用类型进行比较,设置等多于一个的操作,还要他们保证原子性时,就要用到 *atomicReference */ public 阅读全文
posted @ 2019-11-09 15:32 踏月而来 阅读(1201) 评论(0) 推荐(0) 编辑
摘要: 什么是ABA问题 在CAS算法中,需要取出内存中某时刻的数据(由用户完成),在下一时刻比较并交换(CPU保证原子操作),这个时间差会导致数据的变化。 1、线程1从内存位置V中取出A2、线程2从内存位置V中取出A3、线程2进行了写操作,将B写入内存位置V4、线程2将A再次写入内存位置V5、线程1进行C 阅读全文
posted @ 2019-11-09 12:29 踏月而来 阅读(3339) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 24 下一页