最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java使用wait()和notify()線程間通訊的實現(xiàn)

 更新時間:2023年09月01日 15:54:25   作者:L-960  
Java 線程通信是將多個獨立的線程個體進行關聯(lián)處理,使得線程與線程之間能進行相互通信,本文就介紹了java使用wait()和notify()線程間通訊的實現(xiàn),感興趣的可以了解一下

線程.wait()

當一個線程調用 線程.wait()時,它會釋放對象的鎖,讓其他線程可以獲得這個鎖并執(zhí)行相應的同步代碼塊,同時,如果未配置超時時間,該線程會無限期等待,直到接收到線程.notify()信號,注意,一般情況下要在同步代碼塊中執(zhí)行。

線程.notify()

當一個線程調用 線程.notify()時,它會給線程發(fā)送一個信號,讓其在線程.notify()卡住的地方繼續(xù)執(zhí)行,注意,一般情況下要在同步代碼塊中執(zhí)行。

示例

下面是一個演示線程間通訊的示例,在一個定時任務中達成某個條件時,通知主線程繼續(xù)執(zhí)行,同時關閉該定時任務:

    public static void main(String[] args) throws InterruptedException {
        final Thread main = Thread.currentThread();
        main.setName("main thread");
        // 創(chuàng)建一個默認定時任務
        ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(
                5,  // 核心線程數(shù)
                new ThreadPoolExecutor.CallerRunsPolicy()  // 隊列滿后的拒絕策略
        );
        AtomicInteger flag = new AtomicInteger(0);
        // 執(zhí)行定時任務
        final ScheduledFuture<?> queryTask = executor.scheduleAtFixedRate(() -> {
            // 在這里執(zhí)行您的定時任務邏輯
            final int i = flag.addAndGet(1);
            log.info("定時任務執(zhí)行了1!flag={}", i);
            if (i == 5) {
                synchronized (main) {
                    System.out.println("通知主線程取消該任務");
                    main.notify();
                }
            }
        }, 0, 3, TimeUnit.SECONDS);
        final ScheduledFuture<?> printTask = executor.scheduleAtFixedRate(() -> {
            // 在這里執(zhí)行您的定時任務邏輯
            log.info("定時任務執(zhí)行了2!");
        }, 0, 3, TimeUnit.SECONDS);
        log.info("main wait");
        synchronized (main) {
            /**
             *
             主線程在執(zhí)行 main.wait() 進入等待狀態(tài)后,確實會釋放 main 對象的鎖,而不是一直占用鎖。
             這是 Java 中 wait() 方法的特性之一。
             當一個線程調用 wait() 方法時,它會釋放對象的鎖,讓其他線程可以獲得這個鎖并執(zhí)行相應的同步代碼塊。
             */
            main.wait();
        }
        log.info("main 活了");
        // 取消定時任務
        queryTask.cancel(true);
        log.info("scheduledFuture被取消");
    }

運行結果:

11:14:50.838 [main thread] INFO MyTaskConfig - main wait
11:14:50.838 [pool-1-thread-2] INFO MyTaskConfig - 定時任務執(zhí)行了2!
11:14:50.838 [pool-1-thread-1] INFO MyTaskConfig - 定時任務執(zhí)行了1!flag=1
11:14:53.845 [pool-1-thread-1] INFO MyTaskConfig - 定時任務執(zhí)行了2!
11:14:53.845 [pool-1-thread-2] INFO MyTaskConfig - 定時任務執(zhí)行了1!flag=2
11:14:56.841 [pool-1-thread-2] INFO MyTaskConfig - 定時任務執(zhí)行了1!flag=3
11:14:56.842 [pool-1-thread-3] INFO MyTaskConfig - 定時任務執(zhí)行了2!
11:14:59.841 [pool-1-thread-4] INFO MyTaskConfig - 定時任務執(zhí)行了1!flag=4
11:14:59.841 [pool-1-thread-1] INFO MyTaskConfig - 定時任務執(zhí)行了2!
11:15:02.848 [pool-1-thread-2] INFO MyTaskConfig - 定時任務執(zhí)行了2!
11:15:02.848 [pool-1-thread-4] INFO MyTaskConfig - 定時任務執(zhí)行了1!flag=5
通知主線程取消該任務
11:15:02.848 [main thread] INFO MyTaskConfig - main 活了
11:15:02.848 [main thread] INFO MyTaskConfig - scheduledFuture被取消
11:15:05.835 [pool-1-thread-2] INFO MyTaskConfig - 定時任務執(zhí)行了2!
11:15:08.843 [pool-1-thread-2] INFO MyTaskConfig - 定時任務執(zhí)行了2!
11:15:11.836 [pool-1-thread-2] INFO MyTaskConfig - 定時任務執(zhí)行了2!

到此這篇關于java使用wait()和notify()線程間通訊的實現(xiàn)的文章就介紹到這了,更多相關java wait()和notify()線程間通訊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java實現(xiàn)可配置換膚的方法示例

    Java實現(xiàn)可配置換膚的方法示例

    本文主要介紹了Java實現(xiàn)可配置換膚的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • 又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多難用

    又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多難用

    網絡數(shù)據(jù)的基本單位永遠是byte,Java NIO提供ByteBuffer作為字節(jié)的容器,但該類過于復雜,有點難用.本篇文章就帶大家簡單了解一下 ,需要的朋友可以參考下
    2021-06-06
  • java.lang.UnsupportedClassVersionError錯誤的解決辦法(附圖文)

    java.lang.UnsupportedClassVersionError錯誤的解決辦法(附圖文)

    這篇文章主要給大家介紹了關于java.lang.UnsupportedClassVersionError錯誤的解決辦法,"java.lang.UnsupportedClassVersionError"意味著您正在運行的Java版本與編譯該類時使用的Java版本不兼容,需要的朋友可以參考下
    2023-10-10
  • SpringBoot項目中Maven剔除無用Jar引用的最佳實踐

    SpringBoot項目中Maven剔除無用Jar引用的最佳實踐

    在?Spring?Boot?項目開發(fā)中,Maven?是最常用的構建工具之一,通過?Maven,我們可以輕松地管理項目所需的依賴,而,隨著項目的復雜化,無用的?Jar?包引用可能會逐漸增多,本文旨在詳細解析如何在?Spring?Boot?項目中剔除無用的?Jar?引用,需要的朋友可以參考下
    2025-01-01
  • Spring Boot使用Log4j2的實例代碼

    Spring Boot使用Log4j2的實例代碼

    這篇文章主要介紹了Spring Boot使用Log4j2的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java實現(xiàn)微信紅包分配規(guī)則

    Java實現(xiàn)微信紅包分配規(guī)則

    這篇文章主要為大家詳細介紹了Java實現(xiàn)仿微信紅包分配規(guī)則,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • SpringBoot使用編程方式配置DataSource的方法

    SpringBoot使用編程方式配置DataSource的方法

    這篇文章主要介紹了SpringBoot使用編程方式配置DataSource的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • MySQL性能優(yōu)化之配置參數(shù)過程

    MySQL性能優(yōu)化之配置參數(shù)過程

    優(yōu)化MySQL配置:調整連接數(shù)、超時時間及緩沖區(qū)大小,提升性能,建議修改back_log為128-512,interactive_timeout為7200,合理設置InnoDB參數(shù)及緩存策略
    2025-09-09
  • java多線程編程學習(線程間通信)

    java多線程編程學習(線程間通信)

    下面小編就為大家?guī)硪黄猨ava多線程編程學習(線程間通信)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • java實現(xiàn)圖形化界面計算器

    java實現(xiàn)圖形化界面計算器

    這篇文章主要為大家詳細介紹了java實現(xiàn)圖形化界面計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05

最新評論

延津县| 新龙县| 蓬溪县| 旅游| 门头沟区| 潼南县| 图们市| 西昌市| 栾城县| 信丰县| 田林县| 罗江县| 迭部县| 宁河县| 普兰县| 化州市| 都江堰市| 西青区| 长寿区| 香格里拉县| 丰城市| 平遥县| 迁安市| 东兰县| 玉溪市| 建水县| 茶陵县| 太康县| 延吉市| 得荣县| 东港市| 东光县| 息烽县| 汉沽区| 无棣县| 抚松县| 思南县| 张北县| 新安县| 祁连县| 阿巴嘎旗|