codecamp

同步:并发

同步:并发。多个线程同时访问同一份资源,确保资源安全,即线程安全。


锁:每个对象都有且只有一把锁。

一、同步块:

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;
    }
}
线程的基本信息
死锁
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }