多線程筆記三
阿新 • • 發佈:2018-08-08
類重寫 筆記 () 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();
}
多線程筆記三