黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 實現Java鎖的兩種機制

實現Java鎖的兩種機制

更新時間:2022-05-31 09:40:13 來源:動力節點 瀏覽1215次

java多線程編程環境下并發是常見問題,這兩天看了鎖相關的問題,記錄下兩個簡單的用鎖實現等待/喚醒機制的demo。

1.synchronized方式實現等待/喚醒。

public class WaitAndNotify {
    private static boolean flag = true;
    private static Object lock = new Object();
    public static void main(String[] args) {
        Thread waitThread = new Thread(new Wait(), "WaitThread");
        waitThread.start();
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Thread notifyThread = new Thread(new Notify(), "NotifyThread");
        notifyThread.start();
    }
    private static class Wait implements Runnable {
        @Override
        public void run() {
            synchronized (lock) {
                while (flag) {
                    System.out.println(Thread.currentThread() + " flag是true,wait。。" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println(Thread.currentThread() + " flag是false,開始繼續工作" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
            }
        }
    }
    private static class Notify implements Runnable {
        @Override
        public void run() {
            synchronized (lock){
                System.out.println(Thread.currentThread() + " 持有鎖,發出通知" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
                lock.notifyAll();
                flag = false;
                try {
                    TimeUnit.SECONDS.sleep(5);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

打印結果:

Thread[WaitThread,5,main] flag是true,wait。。18:55:28
Thread[NotifyThread,5,main] 持有鎖,發出通知18:55:29
Thread[WaitThread,5,main] flag是false,開始繼續工作18:55:34

分析:根據程序可以看到,大致的過程就是:WaitThread拿到lock對象的鎖,然后根據flag標記,自己調用了wait()方法,從而釋放鎖并進入WAITTING狀態。NotifyThread此時獲取了lock對象的鎖,然后進行notify操作,此時WaitThread被喚醒,但是,它不能立刻執行,因為喚醒線程NotifyThread還持有“該對象的同步鎖”。必須等到NotifyThread線程釋放了“對象的同步鎖”之后,也就是同步代碼塊執行完以后,即睡眠5秒以后,等待線程WaitThread才能獲取到“對象的同步鎖”進而繼續運行。

2.ReentrantLock方式實現等待/喚醒。

public class ReenterLockCondition {
    private static ReentrantLock lock = new ReentrantLock();
    private static Condition condition = lock.newCondition();
    private static Runnable runnable = () -> {
        try {
            lock.lock();
            System.out.println(Thread.currentThread().getName() + "進入等待。。");
            condition.await();
            System.out.println(Thread.currentThread().getName() + "繼續執行");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    };
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(runnable, "thread--1");
        thread.start();
        Thread.sleep(2000);
        lock.lock();
        condition.signal();
        System.out.println("主線程發出信號");
        lock.unlock();
    }
}

打印結果:

thread--1進入等待。。
主線程發出信號
thread--1繼續執行

分析:這里thread–1線程是等待線程,主線程就是喚醒想成。開始thread-1啟動,拿到鎖,然后進入等待并且釋放鎖,2秒后,主線程拿到鎖,然后發出信號并釋放鎖,最后,thread–1繼續執行。

以上就是關于“實現Java鎖的兩種機制”的介紹,大家如果想了解更多相關知識,不妨來關注一下動力節點的Java視頻教程,里面的課程內容由淺到深,通俗易懂,即使沒有基礎也可以聽懂,希望對大家的學習能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产97免费视频 | 精品国产一区二区麻豆 | 成年人午夜在线 | 亚洲精品tv久久久久久久久 | 日韩视频在线播放 | 在线日本人观看成本人视频 | 一级做a爰片欧美一区 | 亚洲阿v天堂2021在线观看 | 亚洲欧洲精品国产区 | 免费观看性欧美特黄 | 国产黄色小视频在线观看 | 美妇乱人伦小说目录 | 日本高清一本视频 | 男人把女人狂躁的免费视频 | 日本天堂网站 | 一级做a爱片就在线看 | 成年黄页网站大全免费动漫 | 成人黄色免费看 | 中文字幕手机在线播放 | 国产午夜一区二区在线观看 | 免费一级欧美片在线观免看 | 成年人小视频在线观看 | 亚洲日本va| 日本涩涩网站 | 综合国产在线 | 男女一起www免费高清视频 | 久热re这里只有精品视频 | 精品精品国产欧美在线观看 | www狠狠干| 欧美国产亚洲精品a第一页 欧美国产在线观看 | 日韩中文字幕视频在线 | 成人网在线看 | 国产特黄特色一级特色大片 | 天天干天天干天天天天天天爽 | 天天干天天摸天天操 | 亚洲免费高清视频 | 天天躁狠狠躁夜躁2021 | 久久厕所精品国产精品亚洲 | 亚洲国产精品综合久久2007 | 亚洲无线码一区二区三区 | 中文字幕日本一本二本三区 |