Java多线程-JUC
2020年9月10日小于 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);