1. 程式人生 > >多線程筆記三

多線程筆記三

類重寫 筆記 () target sta 子類 ide 匿名內部類 不能

多線程(實現Runnable的原理)(了解)
  • 查看源碼
    • 1,看Thread類的構造函數,傳遞了Runnable接口的引用
    • 2,通過init()方法找到傳遞的target給成員變量的target賦值
    • 3,查看run方法,發現run方法中有判斷,如果target不為null就會調用Runnable接口子類對象的run方法

多線程(兩種方式的區別)(掌握)

  • 查看源碼的區別:

    • a.繼承Thread : 由於子類重寫了Thread類的run(), 當調用start()時, 直接找子類的run()方法
    • b.實現Runnable : 構造函數中傳入了Runnable的引用, 成員變量記住了它, start()調用run()方法時內部判斷成員變量Runnable的引用是否為空, 不為空編譯時看的是Runnable的run(),運行時執行的是子類的run()方法
  • 繼承Thread
    • 好處是:可以直接使用Thread類中的方法,代碼簡單
    • 弊端是:如果已經有了父類,就不能用這種方法
  • 實現Runnable接口

    • 好處是:即使自己定義的線程類有了父類也沒關系,因為有了父類也可以實現接口,而且接口是可以多實現的
    • 弊端是:不能直接使用Thread中的方法需要先獲取到線程對象後,才能得到Thread的方法,代碼復雜

      4.08_多線程(匿名內部類實現線程的兩種方式)(掌握)

      
      繼承Thread類
      
      new Thread() {                                                  //1,new 類(){}繼承這個類
          public void run() {                                         //2,重寫run方法
              for(int i = 0; i < 3000; i++) {                         //3,將要執行的代碼,寫在run方法中
                  System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
              }
          }
      }.start();
  • 實現Runnable接口

    new Thread(new Runnable(){                                      //1,new 接口(){}實現這個接口
        public void run() {                                         //2,重寫run方法
            for(int i = 0; i < 3000; i++) {                         //3,將要執行的代碼,寫在run方法中
                System.out.println("bb");
            }
        }
    }).start(); 
public static void main(String[] args) {

        new Thread(){
            public void run(){
                for (int i = 0; i < 1000; i++) {
                    System.out.println("繼承。。");
                }
            }
        }.start();

        new Thread(new Runnable(){
            @Override
            public void run() {
                for (int i = 0; i < 2000; i++) {
                    System.out.println("nuw runna");
                }
            }
        }).start();
    }

多線程筆記三