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

Java并發(fā)編程示例(五):線程休眠與恢復

 更新時間:2014年12月05日 10:18:43   投稿:junjie  
這篇文章主要介紹了Java并發(fā)編程示例(五):線程休眠與恢復,在本節(jié),我們將開發(fā)一個程序,使用sleep()方法來實現(xiàn)每秒鐘打印一次當前時間,需要的朋友可以參考下

有時,我們需要在指定的時間點中斷正在執(zhí)行的線程。比如,每分鐘檢查一次傳感器狀態(tài)的線程,其余時間,線程不需要做任何事情。在此期間,線程不需要使用計算機的任何資源。過了這段時間之后,并且當Java虛擬機調度了該線程,則該線程繼續(xù)執(zhí)行。為此,你可以使用Thread類的sleeep()方法。該方法以休眠的方式來推遲線程的執(zhí)行,而且整數(shù)類型的參數(shù)則指明休眠的毫秒數(shù)。當調用sleep()方法,休眠時間結束后,Java虛擬機分配給線程CPU運行時間,線程就會繼續(xù)執(zhí)行。

另一種是用sleep()方法的方式是通過枚舉類型TimeUnit的元素。該方式使用Thread的sleep()方法來使得當前線程進行休眠,它可以接受指定單位的時間作為參數(shù),并將這些其轉換成對應的毫秒數(shù)。

在本節(jié),我們將開發(fā)一個程序,使用sleep()方法來實現(xiàn)每秒鐘打印一次當前時間。

知其然

按照下面所示步驟,來實現(xiàn)本節(jié)示例。

1.創(chuàng)建一個名為FileClock的類,并且實現(xiàn)Runnable接口。代碼如下:

復制代碼 代碼如下:

public class FileClock implements Runnable {

2.實現(xiàn)run()方法。代碼如下:
復制代碼 代碼如下:

@Override
public void run() {

3.寫一個遍歷十次的循環(huán),在每次迭代中,創(chuàng)建一個Date對象,并將其打印到控制臺。然后,通過TimeUtil的SECONDS屬性調用sleep()方法,來延遲一秒鐘執(zhí)行線程。以為sleep()方法會拋出InterruptedException異常。所以,我們需要多寫幾行代碼,用來捕獲異常。當線程可能中斷是,釋放或者關閉在線程中使用的資源,總是最佳實踐。代碼如下:
復制代碼 代碼如下:

for (int i = 0; i < 10; i++) {
    System.out.printf("%s\n", new Date());
    try {
        TimeUnit.SECONDS.sleep(1);
    } catch (InterruptedException e) {
        System.out.printf("The FileClock has been interrupted.\n");
    }
}

4.我們已經有了實現(xiàn)好的線程類?,F(xiàn)在,我們來實現(xiàn)主類。創(chuàng)建一個名為FileMain的類,并且實現(xiàn)main()方法。代碼如下:

復制代碼 代碼如下:

public class FileMain {
    public static void main(String[] args) {

5.創(chuàng)建一個FileClock對象,再創(chuàng)建一個線程用于執(zhí)行任務。然后,啟動線程。代碼如下:

復制代碼 代碼如下:

FileClock clock = new FileClock();
Thread thread = new Thread(clock);
thread.start();

6.在主線程中,通過TimeUtil的SECONDS屬性調用sleep()方法,來等待五秒鐘。代碼如下:
復制代碼 代碼如下:

try {
    TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
    e.printStackTrace();
}

7.中斷FileClock線程。代碼如下:

復制代碼 代碼如下:

thread.interrupt();

8.執(zhí)行示例,查看執(zhí)行效果。

知其所以然

當執(zhí)行這個程序時,會發(fā)現(xiàn),程序如何每秒鐘打印一次日期對象,以及線程被中斷的情況。

當調用sleep()方法時,線程將離開CPU,并停止執(zhí)行一段時間。在這段時間內,線程不需要CPU了,所以CPU可以執(zhí)行其他任務。

當休眠中的線程被中斷時,會立即拋出一個InterruptedException,而不是等到休眠結束。

永無止境

Java并發(fā)API中,還有另外一個方法可以讓線程讓出CPU。這就是yield()方法,調用該方法就是想Java虛擬機發(fā)送消息說明線程可以讓出CPU給其他線程。Java虛擬機并不保證響應這個請求。一般情況下,該方法僅僅在調試程序時使用。

拿來主義

本文是從 《Java 7 Concurrency Cookbook》 (D瓜哥竊譯為 《Java7并發(fā)示例集》 )翻譯而來,僅作為學習資料使用。沒有授權,不得用于任何商業(yè)行為。

小有所成

本節(jié)所用的示例代碼的完整版。

FileClock類的完整代碼

復制代碼 代碼如下:

package com.diguage.books.concurrencycookbook.chapter1.recipe5;

import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * 每秒向控制臺打印出當前日期和時間。
 * Date: 2013-09-18
 * Time: 23:11
 */
public class FileClock implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.printf("%s\n", new Date());
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                System.out.printf("The FileClock has been interrupted.\n");
            }
        }
    }

FileMain類的完整代碼

復制代碼 代碼如下:

package com.diguage.books.concurrencycookbook.chapter1.recipe5;

import java.util.concurrent.TimeUnit;

/**
 * 演示線程休眠和恢復
 * Date: 2013-09-19
 * Time: 00:29
 */
public class FileMain {
    public static void main(String[] args) {
        FileClock clock = new FileClock();
        Thread thread = new Thread(clock);
        thread.start();

        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        thread.interrupt();
    }
}

相關文章

  • Netty + ZooKeeper 實現(xiàn)簡單的服務注冊與發(fā)現(xiàn)

    Netty + ZooKeeper 實現(xiàn)簡單的服務注冊與發(fā)現(xiàn)

    服務注冊和發(fā)現(xiàn)一直是分布式的核心組件。本文介紹了借助 ZooKeeper 做注冊中心,如何實現(xiàn)一個簡單的服務注冊和發(fā)現(xiàn)。,需要的朋友可以參考下
    2019-06-06
  • SpringBoot自定義HttpMessageConverter操作

    SpringBoot自定義HttpMessageConverter操作

    這篇文章主要介紹了SpringBoot自定義HttpMessageConverter的操作,具有很好的參考價值,如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JUnit5中的參數(shù)化測試實現(xiàn)

    JUnit5中的參數(shù)化測試實現(xiàn)

    參數(shù)化測試使得我們可以使用不同的參數(shù)運行同一個測試方法,從而減少我們編寫測試用例的工作量,本文主要介紹了JUnit5中的參數(shù)化測試實現(xiàn),感興趣的可以了解一下
    2023-05-05
  • java 反射 動態(tài)調用不同類的靜態(tài)方法(推薦)

    java 反射 動態(tài)調用不同類的靜態(tài)方法(推薦)

    下面小編就為大家?guī)硪黄狫AVA 反射 動態(tài)調用不同類的靜態(tài)方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Spring Boot通過Junit實現(xiàn)單元測試過程解析

    Spring Boot通過Junit實現(xiàn)單元測試過程解析

    這篇文章主要介紹了Spring Boot通過Junit實現(xiàn)單元測試過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 如何通過XML方式配置并實現(xiàn)Mybatis

    如何通過XML方式配置并實現(xiàn)Mybatis

    這篇文章主要介紹了如何通過XML方式配置并實現(xiàn)Mybatis,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • java struts2學習筆記之線程安全

    java struts2學習筆記之線程安全

    這篇文章主要為大家詳細介紹了java struts2學習筆記之線程安全,感興趣的朋友可以參考一下
    2016-04-04
  • Java訪問數(shù)據(jù)庫實例詳解

    Java訪問數(shù)據(jù)庫實例詳解

    這篇文章主要為大家詳細介紹了Java訪問數(shù)據(jù)庫實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解Java遞歸實現(xiàn)樹形結構的兩種方式

    詳解Java遞歸實現(xiàn)樹形結構的兩種方式

    在開發(fā)的過程中,很多業(yè)務場景需要一個樹形結構的結果集進行前端展示,也可以理解為是一個無限父子結構,常見的有報表指標結構、菜單結構等,這篇文章主要介紹了Java遞歸實現(xiàn)樹形結構的兩種方式,需要的朋友可以參考下
    2022-10-10
  • idea遠程debug調試部署在tomcat上項目

    idea遠程debug調試部署在tomcat上項目

    本文主要介紹了idea遠程debug調試部署在tomcat上項目,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

石家庄市| 东台市| 拜泉县| 四平市| 元氏县| 巴彦县| 牟定县| 丹凤县| 大化| 凤城市| 南丹县| 曲阜市| 策勒县| 西和县| 武胜县| 峡江县| 宁化县| 迁安市| 泗水县| 益阳市| 赣州市| 阜康市| 平舆县| 平顺县| 雅江县| 宁海县| 岑巩县| 尚志市| 永年县| 河北省| 马公市| 鄂伦春自治旗| 儋州市| 积石山| 彭泽县| 蒲江县| 治多县| 台东县| 北安市| 鹤岗市| 石泉县|