大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) 實(shí)現(xiàn)Java鎖的兩種機(jī)制

實(shí)現(xiàn)Java鎖的兩種機(jī)制

更新時(shí)間:2022-05-31 09:40:13 來源:動力節(jié)點(diǎn) 瀏覽1299次

java多線程編程環(huán)境下并發(fā)是常見問題,這兩天看了鎖相關(guān)的問題,記錄下兩個(gè)簡單的用鎖實(shí)現(xiàn)等待/喚醒機(jī)制的demo。

1.synchronized方式實(shí)現(xiàn)等待/喚醒。

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,開始繼續(xù)工作" + 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() + " 持有鎖,發(fā)出通知" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
                lock.notifyAll();
                flag = false;
                try {
                    TimeUnit.SECONDS.sleep(5);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

打印結(jié)果:

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

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

2.ReentrantLock方式實(shí)現(xiàn)等待/喚醒。

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() + "進(jìn)入等待。。");
            condition.await();
            System.out.println(Thread.currentThread().getName() + "繼續(xù)執(zhí)行");
        } 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("主線程發(fā)出信號");
        lock.unlock();
    }
}

打印結(jié)果:

thread--1進(jìn)入等待。。
主線程發(fā)出信號
thread--1繼續(xù)執(zhí)行

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

以上就是關(guān)于“實(shí)現(xiàn)Java鎖的兩種機(jī)制”的介紹,大家如果想了解更多相關(guān)知識,不妨來關(guān)注一下動力節(jié)點(diǎn)的Java視頻教程,里面的課程內(nèi)容由淺到深,通俗易懂,即使沒有基礎(chǔ)也可以聽懂,希望對大家的學(xué)習(xí)能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久久99国产乱子伦精品免费 | 成人日b视频| 日本一级毛片2021免费 | 四虎影视永久免费视频观看 | 午夜官网 | 国产美女视频免费 | 亚洲国产精品久久久久久 | 黄色片网站大全 | 日日草夜夜草 | 轻轻色在线视频中文字幕 | 久久久久青草 | 国产精品午夜久久久久久99热 | 欧美久久精品一级c片片 | 亚洲欧美日韩国产一区图片 | 免费国产a| 在线欧美精品一区二区三区 | 中文字幕欧美日韩一 | 亚洲日本一区二区三区高清在线 | 国产一区a | 亚洲夂夂婷婷色拍ww47 | 99久热在线精品视频观看 | 成 人 黄 片 大全 | 91精品国产综合久久精品 | 成人久久精品一区二区三区 | 日日摸夜夜添夜夜添欧美毛片 | 日韩精品欧美亚洲高清有无 | 在线观看精品国内福利视频 | 国内精品自在自线在免费 | 免费福利视频网 | 99九九精品免费视频观看 | 豆奶视频污 | 国产精品久久久久久久久ktv | 91精品国产91久久久久久麻豆 | 亚洲性片 | 内衣办公室动漫久久影院 | 九九在线视频 | 免费福利影院 | 亚洲狠狠婷婷综合久久久久图片 | 天天操综| 国产国拍亚洲精品永久不卡 | 亚洲欧美日产综合一区二区三区 |