使用匿名內部類和lamda的方式創建線程


1、匿名內部類的方式

 1 /**
 2  *匿名內部類的方式啟動線程
 3  */
 4 public class T2 {
 5     public static void main(String[] args) {
 6      //集成類的方式
 7         new Thread(){
 8             public void run(){
 9                 System.out.println("thread1 start ... ");
10             }
11         }.start();
12  
13      //實現接口的方式
14         new Thread(new Runnable() {
15             @Override
16             public void run() {
17                 System.out.println("thread2 start .... ");
18             }
19         }).start();
20  
21     }
22 }

第1段相當於繼承Thread的方式;第二段相當於實現Runnable的方式。

如果我們將上面兩段代碼合並呢?

 1 package com.yy.concurrent.base1;
 2  
 3 /**
 4  *匿名內部類的方式啟動線程
 5  */
 6 public class T2 {
 7     public static void main(String[] args) {
 8  
 9  
10         new Thread(new Runnable() {
11             @Override
12             public void run() {
13                 System.out.println("runnable");
14             }
15         }){
16             public void run(){
17                 System.out.println("sub");
18             }
19         }.start();
20  
21     }
22 }

此時輸出sub,此時相當於將一個實現了runnable接口的類對象傳入Thread子類的構造方法,並且在這個子類中重寫了run方法。因此原本的run()方法被覆蓋。

2. Lambda方式

 
public class Test{
    public static void main(String[] args) {
        /*
        匿名內部類的方式
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("nihao");
            }
        }).start();
        System.out.println("你好");
        
        */
        
        
        //lambda的方式
        new Thread(()-> {
            for(int i = 1 ; i<100 ; i++){
                System.out.println("It is a lambda function!");
            }
 
        }).start();
 
    }
}

此時相當於本文第一段代碼中的實現接口的方式。

另外可參考:https://blog.csdn.net/Topdandan/article/details/78347865


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM