多线程2
懒汉式:实例的延迟加载。
延迟加载有问题么?
有!如果多线程访问时会出现安全问题。
怎么解决?可以加同步解决。用双重判断形式解决同步代码块低效问题。
加同步时候使用锁是哪个?该类所属的字节码文件对象。
延迟加载的单例设计模式实例!如

饿汉式:


如下例子:





生成者与消费者替换方案:1.5版本以后提供了显示的锁机制以及锁对象的等待唤醒操作机制,一个锁对应多个condition,1.5版本以前一个锁对应一个notify,如果添加两个notify就要再建锁(同步),如果两个同步形成嵌套造成死锁,现在一个锁有好几组wait()、notify()。把wait()\notify()封装成condition对象,同时,要用finally{lock。unlock}释放锁的动作







中止线程:interrupt()方法将处于冻结状态的线程强制恢复到运行状态,清除线程冻结状态,不是结束线程。这样可以操作标记让线程结束。
join()在线程1申请加入运行状态(抢夺cpu执行权),一旦抢到,线程2放弃cup执行权的线程处于冻结状态,当线程1结束后,线程2才恢复运行状态,如果有线程3、线程4...,因为线程1是从线程2拿过来的cpu执行权,无论线程3是否结束,线程2都要等线程1结束才开始运行。
yield()暂停线程执行,临时释放cpu执行权,之后又可以重新获得,平均线程运行效果。
技巧性写法:


浙公网安备 33010602011771号