天天看點

線程建立方式

線程建立方式

建立線程的兩種方式

一)繼承Thread類,重寫run方法

1 package thread;
 2 
 3 public class cat {
 4     public static void main(String[] args) {
 5         Thr cat1 = new Thr();
 6         // 主線程在開啟這個線程之後,并不會阻塞在這裡,而是會繼續向下執行
 7         cat1.start(); // 思考線程開啟為什麼是start而不是run方法
 8         for (int i = 0; i < 10 ;  i++) {
 9             System.out.println("mian線程執行");
10             try {
11                 Thread.sleep(1000);
12             } catch (InterruptedException e) {
13                 e.printStackTrace();
14             }
15         }
16     }
17 }
18 // 繼承Thread之後,Thr類就可以看作一個線程
19 class Thr extends Thread {
20     int count = 0;
21     @Override
22     public void run() {
23         while (true) {
24             System.out.println("幹就完了" + "數量為" + (++count));
25             try {
26                 Thread.sleep(1000);
27             } catch (InterruptedException e) {
28                 e.printStackTrace();
29             }
30             if (count == 80) {
31                 break;
32             }
33         }
34     }
35      
線程建立方式

 程式中線程分析:

線程建立方式

疑問解答: 為什麼不是run而是start?

此時的線程名為main,為串行化,而不是多線程了

線程建立方式

 源碼解讀:

1)

線程建立方式
線程建立方式

 2)

真正實作多線程的是start0方法,是本地方法,底層是c/c++實作的

線程建立方式
線程建立方式

二)實作Runnable接口,重寫run方法

  因為java是單繼承的,加入現在A類繼承了B類,但是想把A類當成線程來使用,此時就不能繼承Thread類了。這個時候,該Runnable接口上場表演了。這裡不能再用start( )去開啟線程了。這裡底層使用了設計模式【代理模式】

代理模式:

線程建立方式
線程建立方式

繼續閱讀