跳至主要內容

Java多线程-JUC

zzz小于 1 分钟

Java多线程-JUC

线程通信

ReentrantLock

Lock lock = new ReentrantLock();
Condition condition1 = lock.newCondition();
lock.lock();
lock.unlock();
condition1.await();
condition1.signal();

读写锁

ReentrantReadWriteLock

乐观锁

悲观锁

读写分离增强效率

ReadWriteLock

写写/读写 需要“互斥”

读读 不需要“互斥”

线程八锁

 /**
     * 1、两个普通方法,两个线程,标准打印,打印? one two
     * 2、新增Thead.sleep给getOne(),打印? one two2
     * 3、新增getThree(),打印? three one two
     * 4、两个普通方法,两个Number对象一个调用number1,一个调用number2 打印? two one
     * 5、getOne 静态同步方法  打印? two one
     * 6、getOne getTwo 静态同步方法  打印?  one two
     * 7、getOne静态 getTwo 非态同步方法 两个Number对象  打印? two one
     * 8、getOne getTwo 静态同步方法 两个Number对象  打印? one two
     *
     * 线程八锁关键点:
     *  ①非静态方法的锁默认为this,静态方法的锁默认为对应的Class的实例
     *  ②某一个时刻内,只能有一个线程持有锁,无论有几个方法。
     */

ForkJoinPool 分支/合并框架 1.7引入

采用"工作窃取"模式

java8 对forkJoin进行了改造
Long sum = LongStream.rangeClosed(0L, 100000000L).parallel().reduce(0L, Long::sum);
System.out.println(sum);