簡體   English   中英

Java Thread.sleep 在可運行工具中無法按預期工作

[英]Java Thread.sleep not working as expect in runnable implement

我想弄清楚Thread.sleep是如何工作的,所以我創建了以下代碼:

 public static void main() {

        Runnable runnable = new Runnable() {
            public void run() {
                try {
                    Thread.sleep(1000);
                    System.out.println("Middle");
                } catch (InterruptedException e) {
                }
            }
        };

        System.out.println("Before");
        Thread t2 = new Thread(runnable);
        t2.start();
        System.out.println("After");

但是,它只在控制台中打印BeforeAfter並跳過Middle

所以我想知道這個 Thread.sleep 是否會破壞 Runnable 部分?

在我的機器上,您的代碼輸出是:

Before
After
Middle

如果你想打印Middle之前, After你需要添加t2.join()方法調用之后t2.start()
加入方法說明

使用join()使您的主線程等待您的線程 (t2) 執行完成。

    public static void main(String[] args) throws InterruptedException {
    Runnable runnable = new Runnable() {
        public void run() {
            try {
                Thread.sleep(1000);
                System.out.println("Middle");
            } catch (InterruptedException e) {
            }
        }
    };

    System.out.println("Before");
    Thread t2 = new Thread(runnable);
    t2.start();
    t2.join();
    System.out.println("After");

輸出:之前中間之后

參考這篇文章了解join()這個線程加入代碼是什么意思?

參考這篇文章了解主線程Java中的主線程何時停止?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM