多線程的一些例子,多線程循環(huán)打印A和B,單例模式double check和靜態(tài)內部類

多線程循環(huán)打印A&B

public class MultiThreadPrint {

    private static ReentrantLock lock = new ReentrantLock();
    private static Condition conditionA = lock.newCondition();
    private static Condition conditionB = lock.newCondition();

    static void printA() {
        for(int i = 0; i< 1000; i++){
            try {
                lock.lock();
                System.out.println("print A");
                //synchronize使用wait notify阻塞和喚醒,lock使用await&signal
                conditionB.signal();
                conditionA.await();
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
        }
    }

    static void printB() {
        for (int i = 0; i < 1000; i++){
            try {
                lock.lock();
                System.out.println("print B");
                conditionA.signal();
                conditionB.await();
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
        }
    }

    public static void main(String[] args) {
        new Thread(() -> {
            printA();
        }).start();
        new Thread(() -> {
            printB();
        }).start();
    }

單例模式-靜態(tài)內部類
public class Singleton {

//私有構造方法
private Singleton() {
}

//靜態(tài)內部類能保證沒被調用時,不被初始化
private static class SingletonInner {
    private static final Singleton singleton = new Singleton();
}

//線程安全
public static Singleton getSingleton() {
    return SingletonInner.singleton;
}

}


雙重校驗

public class Singleton {

//私有構造方法
private Singleton() {
}

// volatile防止指令重排
private static volatile Singleton singleton = null;

public static Singleton getSingleton() {
    //double-check
    if(singleton == null){
        synchronized(Singleton.class){
            if(singleton == null){
                singleton = new Singleton();
            }
        }
    }
    return singleton;
}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容