簡體   English   中英

Thread構造函數如何直接接受run方法?

[英]How can a Thread constructor can accept a run method directly?

我正在參考DeadLock代碼,看到了這個網站

http://www.javatpoint.com/deadlock-in-java

我看到了java API,但找不到任何這樣的Thread Constructor,仍然想知道這是如何在Eclipse IDE中編譯的?

Thread t1 = new Thread() {

    public void run() {  
        synchronized (resource1) {  
            System.out.println("Thread 1: locked resource 1");  

            try { Thread.sleep(100);} catch (Exception e) {}  

            synchronized (resource2) {  
                System.out.println("Thread 1: locked resource 2");  
            }  
        }  
    }  
};  

Thread構造函數如何直接接受run方法?

構造函數不接受 run方法(例如,作為參數),該代碼正在創建匿名類 ,請參閱本教程 在幕后,創建了一個沒有名稱的類(匿名類),它從Thread派生並覆蓋run方法; 然后創建該類的實例並將其分配給t1變量。


只是為了完整性,但:從Java 8中, 可以Thread構造函數(實際上)接受run函數作為參數,因為Java的8位的lambda函數。 看起來像這樣:

    Thread t = new Thread(() -> {
        System.out.println("Running");
    });

這是可能的,因為Thread有一個接受Runnable實例的構造函數,而Runnable是一個功能接口 (只定義一個函數的接口),所以你可以簡單地使用lambda創建一個實現該接口的實例,然后將其傳遞給Thread構造函數。 有一個關於lambda表達式的教程在這里 但這並不是引用代碼所做的。

這是使用lambda而不是匿名類的問題中的代碼:

Thread t1 = new Thread(() -> {
    synchronized (resource1) {  
        System.out.println("Thread 1: locked resource 1");  

        try { Thread.sleep(100);} catch (Exception e) {}  

        synchronized (resource2) {  
            System.out.println("Thread 1: locked resource 2");  
        }  
    }  
});

暫無
暫無

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

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