国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java并發編程示例(五):線程休眠與恢復

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

2019-12-06 14:08junjie JAVA教程

這篇文章主要介紹了Java并發編程示例(五):線程休眠與恢復,在本節,我們將開發一個程序,使用sleep()方法來實現每秒鐘打印一次當前時間,需要的朋友可以參考下

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

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

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

知其然

按照下面所示步驟,來實現本節示例。

1.創建一個名為FileClock的類,并且實現Runnable接口。代碼如下:

復制代碼代碼如下:

public class FileClock implements Runnable {


2.實現run()方法。代碼如下:

復制代碼代碼如下:

@Override
public void run() {


3.寫一個遍歷十次的循環,在每次迭代中,創建一個Date對象,并將其打印到控制臺。然后,通過TimeUtil的SECONDS屬性調用sleep()方法,來延遲一秒鐘執行線程。以為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.我們已經有了實現好的線程類?,F在,我們來實現主類。創建一個名為FileMain的類,并且實現main()方法。代碼如下:

復制代碼代碼如下:

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

 

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

 

復制代碼代碼如下:

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.執行示例,查看執行效果。

 

知其所以然

當執行這個程序時,會發現,程序如何每秒鐘打印一次日期對象,以及線程被中斷的情況。

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

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

永無止境

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

拿來主義

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

小有所成

本節所用的示例代碼的完整版。

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();
    }
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国内精品嫩模av私拍在线观看 | 欧美日韩精品久久久 | 国产精品99 | 久久久久国产一区二区三区 | 国产a视频 | 国产精品亚洲视频 | 欧美三级在线 | 久久国内免费视频 | 久久久久久久久久久久国产 | 精品国产一区二区三区在线观看 | 国产精品久久久久久久久久免费 | 亚洲一区二区三区久久久 | 精品久久国产 | 成人国产精品视频 | 日韩av免费在线 | 日狠狠 | 欧美一区二区三区四区五区 | 久久性色 | 国产精品久久久久国产a级 国产免费久久 | 日韩国产欧美视频 | 欧美区日韩区 | 欧美一区二区三区在线观看视频 | 免费一级毛片 | 免费av一区 | 成人特黄a级毛片免费视频 国产在线视频一区二区 | 欧美激情久久久 | 97精品国产一区二区三区 | 777色狠狠一区二区三区 | 伦一区二区三区中文字幕v亚洲 | 中文字幕第一页在线 | 在线播放一区 | 91免费在线视频观看 | 日本涩涩视频 | 色婷婷网| 久久久久香蕉视频 | 日韩av在线中文字幕 | 免费a视频 | 久久久99国产精品免费 | 91在线观看免费观看 | 狠狠干最新网址 | 亚洲h|