同步:并发
2019-07-07 23:44 更新
同步:并发。多个线程同时访问同一份资源,确保资源安全,即线程安全。
锁:每个对象都有且只有一把锁。
一、同步块:
synchronized (对象) {
}
注:
括号内放的是对象,类.class也是对象。
二、同步方法
public synchronized void function1() {
//普通成员方法默认获得的是当前对象的锁。
}
public static synchronized void function1() {
//静态方法默认获得的是当前类的锁,即类.class的锁。
}
单例模式的应用: 1.懒汉式
/**
* 懒汉式
* 1.构造器私有化。
* 2.声明私有的静态属性。
* 3.对外提供访问属性的静态方法,确保对象存在。
* */
class MyJvm{
private static MyJvm instance;
private MyJvm() {}
public static MyJvm getInstance() {
if(instance == null) {//提供效率
synchronized (MyJvm.class) {
if(instance == null) {//安全
instance = new MyJvm();
}
}
}
return instance;
}
}
2.饿汉式
/**
* 饿汉式
* 1.构造器私有化。
* 2.声明私有的静态属性,同时创建该对象。
* 3.对外提供访问属性的静态方法。
* 静态成员会在加载类的时候就被初始化,因此可以直接获取。但有时使用MyJvm的其他方法时但不想实例化是做不到的,可以使用第三种方法。
* 可参考static关键字知识点。
* */
class MyJvm{
private static MyJvm instance = new MyJvm();
private MyJvm() {}
public static MyJvm getInstance() {
return instance;
}
}
3.延迟加载
/**
* 延迟加载
* 当使用JvmHolder类时才会初始化instance,延缓加载时间。
* 这样在使用MyJvm的其他方法时就不会实例化instance。
* */
class MyJvm{
private static class JvmHolder{
private static MyJvm instance = new MyJvm();
}
private MyJvm() {}
public static MyJvm getInstance() {
return JvmHolder.instance;
}
}
以上内容是否对您有帮助:
← 线程的基本信息
更多建议: