随笔分类 - 多线程
摘要:public class CompletableFuture3 { public static void main(String[] args) throws ExecutionException, InterruptedException { // testJoin(); testCompleta
阅读全文
摘要:public class CompletableFuture2 { public static void main(String[] args) throws InterruptedException { // thenAcceptBoth(); // acceptEither(); // runA
阅读全文
摘要:public class CompletableFutureTest { public static void main(String[] args) throws Exception { test5(); } /** * whenCompleteAsync指的是异步执行传入的BiConsumer
阅读全文
摘要:public class CompletableServiceTest { public static void main(String[] args) throws ExecutionException, InterruptedException { // test1(); // test2();
阅读全文
摘要:Futrue的缺点有(1)get方法会阻塞 ,(2)不支持注册回调方法 ,(3)不支持级联操作 CompletableFuture弥补了这些缺点 public class CompletableFutureTest { public static void main(String[] args) t
阅读全文
摘要:ScheduledThreadPoolExecutor可以代替timer,timer的缺点是一个timer启动一个线程,如果任务数量很多,会创建很多线程,不推荐使用。 ScheduledThreadPoolExecutor他有个线程池管理线程管理所有任务,效率更高 public class Sche
阅读全文
摘要:/** * CyclicBarrier 一组线程相互等待 */ public class Beer { public static void main(String[] args) { final int count = 5; final CyclicBarrier barrier = new Cy
阅读全文
摘要:/** * 模拟铁人三项 */ public class PhaserTest { private static Random random = new Random(System.currentTimeMillis()); public static void main(String[] args
阅读全文
摘要:/** * 可用用phaser模拟countDownLatch * awaitAdvance方法:如果传入的参数和当前的phase相等,线程就阻塞住等待phase的值增加;否则就立即返回 */ public class PhaserTest2 { private static Random rand
阅读全文
摘要:Fork/Join框架:在必要的情况下,将一个大任务,进行拆分(fork) 成若干个子任务(拆到不能再拆,这里就是指我们制定的拆分的临界值),再将一个个小任务的结果进行join汇总。 采用juc包的fork/join框架 public class ForkJoinWork extends Recur
阅读全文
摘要:publicclass RWDictionary { private final Map<String, String> m = new TreeMap<String, String>(); private final ReentrantReadWriteLock rwl = new Reentra
阅读全文
摘要:(1)StampedLock邮戳锁支持三种模式,分别是:写锁,读锁,乐观读。 ReentrantReadWriteLock读写锁的缺点是在读多写少的情况下,写线程会被阻塞,写线程可能会一直抢不到锁发生饥饿现象 邮戳锁可以避免这种情况,在乐观读的时候,不会对其他的写线程阻塞,其他的线程可以获取到写锁
阅读全文
摘要:public class SemaphoreTest { //信号量,只允许 3个线程同时访问 private static Semaphore semaphore = new Semaphore(3); public static void main(String[] args) { Execut
阅读全文
摘要:exchanger用于两个线程交换数据 /** * 两个线程交换数据,A线程发送数据给B线程,B线程接受的数据和A发送的数据是同一个对象 * A will send the Object java.lang.Object@6e22e576 * B will send the Object java.
阅读全文
摘要:一个生产者和一个消费者 public class ConditionTest { private static ReentrantLock lock = new ReentrantLock(); private static Condition condition = lock.newConditi
阅读全文
摘要:/** * 这里只是将Semaphore包装了一下,注意当Semaphore的构造参数是1时,本身就是一个显示锁 */ public class SemaphoreLock { private final Semaphore semaphore = new Semaphore(1); public
阅读全文
摘要:有一个大小为50000的数组,要求开启5个线程分别计算10000个元素的和,然后累加得到总和 /** * 开启5个线程进行计算,最后所有的线程都计算完了再统计计算结果 */ public class Test5 { private static Random random = new Random(
阅读全文
摘要:CountDownLatch复杂点的例子 public class CountDownLatchTest2 { private static Random random = new Random(System.currentTimeMillis()); static class Event { in
阅读全文
摘要:CountdownLatch 一个线程或者多个线程等待其他线程完成了再接着往下执行 public class CountDownLatchTest { private static ExecutorService executorService = Executors.newFixedThreadP
阅读全文
摘要:Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C++手动管理内存的能力,不建议使用该类 (1)Unsafe对int,long ,Object的CAS操作 public class
阅读全文

浙公网安备 33010602011771号