Lock锁同样可以完成代码同步的任务。
相较于synchronized方式,Lock锁的出现使同步操作更为灵活。无需使用限制性强的代码块。
Lock同样为抽象类,需要使用其子类ReentrantLock的对象完成方法调用。
主要方法:
public void lock()获取锁
public void unlock() 释放锁
2:线程死锁
在多线程的代码编辑过程中,由于考虑得不够周全,会出现死锁的情况。
线程死锁代码:备注
原因分析:
线程1将锁1锁住,线程2将锁2锁住,而线程1要继续执行锁2中的代码,线程2要继续执行锁1中的代码,但是此时,两个锁均处于锁死状态。最终导致两线程相互等待,进入无限等待状态。
有同步代码块的嵌套动作。
解决方法:
尽量不要写同步代码块嵌套
3:单例设计模式
内存当中只存在一个实例对象。
单例设计模式要求。
构造方法私有化
定义了自己类型的静态私有成员变量
对外提供公共的、静态的获取实例方法
实例创建方式分为懒汉式与饿汉式
懒汉式时,需要考虑线程安全问题
单例模式标准代码:
懒汉式:
class Single{
private static Single s = null;
private Single(){}
public static Single getIntance(){
if (s == null){
s = new Single();
}
return s;
}
}
饿汉式:
class Single{
private static Single s = new Single();
private Single(){}
public static Single getIntance(){
return s;
}
}