中间变量
比第一种好 出现不一致性概率小,方法完成前读到脏数据概率小
哲学家问题
死锁:两把锁 在锁定一把的时候等待另外一把锁
解决方案:
- 两把锁合并成一把锁(锁的粗化)
- 混进一个左撇子
if (index ==0){sync(right){sync(left){}}}else{sync(left){sync(right){}}}
- 效率更高的写法,奇数偶数分开,混进一半的左撇子(index%2==0)
交替输出问题
- Locksupport 交替执行park当前线程阻塞(停止)内部做的标记
- TransferQueue 容量为0的队列
new Thread(()->{synchronized(o){for(char c:aI){System.out.print(c);try{o.notify();o.wait();//让出锁}catch(InterruptedException e){e.printStackTrace();}}o.notify();//必须,否则无法停止程序}},"t1").start();new Thread(()->{synchronized(o){//当成一把锁来使用 当前线程关联的等待队列for(char c:aC){System.out.print(c);try{o.notify();o.wait();//让出锁}catch(InterruptedException e){e.printStackTrace();}}o.notify();//必须,否则无法停止程序}},"t2").start();
- countDownLatch 先await
- Lock ReentrantLock await signal
condition理解为一个队列lock.newCondition();
生产者消费者问题 ReentantLock Condition
lock.lock();try{while(count>=maxNum){producerCondition.awati();System.out.println("生产能力上限,等待");}count++;System.out.println(Thread.currentThread().getName()+"生产者生产,目前有"+count);//唤醒消费者consumerCondition.signalAll();}catch(){}finally{lock.unlock();}
异步回调回滚问题(分布式事务)
大任务分解成小任务,出错回滚问题(分布式事务)
管理器监听 自己callback回滚
底层同步问题(乱序和屏障的问题)
- cpu存在乱序执行
ALU CPU内部运算单元 访问寄存器的速度,比访问内存的速度快100倍
DCL单例需不需要voliate 旧的需要 新的不需要已优化
