java 線程詳解(一)線程實現的兩種方式 Thread&Runable

線程定義

線程是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程並行執行不同的任務。在Unix System V及SunOS中也被稱爲輕量進程(lightweight processes),但輕量進程更多指內核線程(kernel thread),而把用戶線程(user thread)稱爲線程。

程序 進程 線程

程序 可以理解爲一組靜態的代碼
進程 正在進行的程序 靜態代碼運行起來
線程 正在進行的進程的小單元

java中線程分類

1:主線程 系統線程
2:用戶線程 Main
3:gc 垃圾回收器

線程的幾種狀態

在這裏插入圖片描述

java創建線程和執行

第一種
1:自己寫一個類
2:繼承父類Thread
3:重寫run()方法
4:new一個線程對象 調用start方法 讓線程進入就緒狀態
代碼:
多人跑步比賽

package my;

public class runman extends Thread {//繼承Thread 類變成線程
    //重寫run方法
  private  String name;
 public runman(String name)
 {
     this.name=name;
 }


    @Override
    public void run() {
        for (int i = 0; i <10 ; i++) {
            System.out.println(this.name + "跑到第" + i + "米");

        }
    }

    public static void main(String[] args) {
     //創建線程對象
        runman ra=new runman("a");
        runman rb=new runman("b");
        runman rc=new runman("c");
        //調用start方法線程進入就緒狀態   cpu分配
        ra.start();//從Thread繼承來的方法
        rb.start();
        rc.start();
        
    }
}

package my;

public class runman extends Thread {//繼承Thread 類變成線程
//重寫run方法
private String name;
public runman(String name)
{
this.name=name;
}

int i;
@Override
public void run() {
    for (i = 0; i <10 ; i++) {
        System.out.println(this.name + "跑到第" + i + "米");
    }
}

public static void main(String[] args) {
 //創建線程對象
    runman ra=new runman("a");
    runman rb=new runman("b");
    runman rc=new runman("c");
    //調用start方法線程進入就緒狀態   cpu分配
    ra.start();//從Thread繼承來的方法
    rb.start();
    rc.start();

}

}
在這裏插入圖片描述
第二種:
1:自己寫一個類
2:實現接口 Runable
3:重寫run()方法
4:new一個線程對象 調用start方法 讓線程進入就緒狀態

代碼:

package my;

public class runman implements Runnable {//繼承Thread 類變成線程
    //重寫run方法
  private  String name;
 public runman(String name)
 {
     this.name=name;
 }

    int i;
    @Override
    public void run() {
        for (i = 0; i <10 ; i++) {
            System.out.println(this.name + "跑到第" + i + "米");

        }
    }

    public static void main(String[] args) {
     //創建線程對象
        runman ra=new runman("a");
        runman rb=new runman("b");
        runman rc=new runman("c");
        //實現Runable的類不能直接start 將對象放入線程
        Thread threada =new Thread(ra);
        Thread threadb =new Thread(ra);
        Thread threadc =new Thread(ra);
        threada.start();
        threadb.start();
        threadc.start();
    }
}

運行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章