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);