Java多線程簡介
線程是程序中一個單一的順序控制流程。進程內有一個相對獨立的、可調度的執行單元,是系統獨立調度和分派CPU的基本單位指令運行時的程序的調度單位。在單個程序中同時運行多個線程完成不同的工作,稱爲多線程。
多線程指在程序內部同時執行多條任務線,各自同時進行處理不同的任務,從而最大限度利用計算機性能,提高程序效率。
進程與線程比較
每個正在系統上運行的程序都是一個進程。每個進程包含一到多個線程。線程是一組指令的集合,或者是程序的特殊段,它可以在程序裏獨立執行。也可以把它理解爲代碼運行的上下文。所以線程基本上是輕量級的進程,它負責在單個程序裏執行多任務。通常由操作系統負責多個線程的調度和執行。
使用線程可以把佔據時間長的程序中的任務放到後臺去處理,程序的運行速度可能加快,在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了。在這種情況下可以釋放一些珍貴的資源如內存佔用等等。
如果有大量的線程,會影響性能,因爲操作系統需要在它們之間切換,更多的線程需要更多的內存空間,線程的中止需要考慮其對程序運行的影響。通常塊模型數據是在多個線程間共享的,需要防止線程死鎖情況的發生。
總結:進程是所有線程的集合,每一個線程是進程中的一條執行路徑。
多線程創建方式
多線程的創建方式有多種,本文介紹常用的兩種方式:繼承Thread類、實現Runable接口,其他還有使用內部類等方式。
繼承Thread類方式
/**
* 功能描述:通過繼承Thread的方式創建多線程
*
*/
class CreateThread extends Thread {
// run方法中編寫 多線程需要執行的代碼
public void run() {
for (int i = 0; i< 5; i++) {
System.out.println("i:" + i);
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
System.out.println("-----多線程創建開始-----");
// 1.創建一個線程
CreateThread createThread = new CreateThread();
// 2.開始執行線程 注意 開啓線程不是調用run方法,而是start方法
System.out.println("-----多線程創建啓動-----");
createThread.start();
System.out.println("-----多線程創建結束-----");
}
}
以上代碼運行結果:
-----多線程創建開始-----
-----多線程創建啓動-----
-----多線程創建結束-----
i:0
i:1
i:2
i:3
i:4
實現runable接口方式
/**
* 功能描述:通過實現Runnable接口的方式創建多線程
*
*/
class CreateRunnable implements Runnable {
@Override
public void run() {
for (int i = 0; i< 10; i++) {
System.out.println("i:" + i);
}
}
}
public class ThreadDemo2 {
public static void main(String[] args) {
System.out.println("-----多線程創建開始-----");
// 1.創建一個線程
CreateRunnable createThread = new CreateRunnable();
// 2.開始執行線程 注意 開啓線程不是調用run方法,而是start方法
System.out.println("-----多線程創建啓動-----");
Thread thread = new Thread(createThread);
thread.start();
System.out.println("-----多線程創建結束-----");
}
}
獲取線程對象以及名稱
常用線程api方法 |
|
start() |
啓動線程 |
currentThread() |
獲取當前線程對象 |
getID() |
獲取當前線程ID Thread-編號 該編號從0開始 |
getName() |
獲取當前線程名稱 |
sleep(long mill) |
休眠線程 |
Stop() |
停止線程, |
常用線程構造函數 |
|
Thread() |
分配一個新的 Thread 對象 |
Thread(String name) |
分配一個新的 Thread對象,具有指定的 name正如其名。 |
Thread(Runable r) |
分配一個新的 Thread對象 |
Thread(Runable r, String name) |
分配一個新的 Thread對象 |