黑馬程序員--------Java多線程講解筆記
進程:正在進行中的程序。 每一個進程執行都有一個執行順序,該順序是一個執行路徑,或者叫一個控制單元。
線程:就是進程中一個執行單元或執行情景或執行路徑負責進程中程序執行的控制單元 。一個進程中至少要有一個線程。當一個進程中線程有多個時,就是多線程。
為什么要用多線程
1,讓計算機"同時"做多件事情,節約時間。
2,后臺運行程序,提高程序的運行效率.。
3,多線程可以讓程序"同時"處理多個事情。
4,計算機CPU大部分時間處于空閑狀態,浪費了CPU資源。
1.創建線程的兩種方式:
方式一步驟:繼承Thread類
子類覆蓋父類中的run方法,將線程運行的代碼存放在run中。
建立子類對象的同時線程也被創建。
通過調用start方法開啟線程。
public class ThreadTest extends Thread{ private int i; public void run() { for (i = 0; i < 100; i++) System.out.println(Thread.currentThread().getName() + "-------"+ i); } public static void main(String[] args) { Demo d1 = new Demo(); Demo d2 = new Demo(); d1.start(); d2.start(); for (int i = 0; i < 60; i++) System.out.println(Thread.currentThread().getName()+"----------" + i); } } |
方式二步驟:實現Runnable接口
子類覆蓋接口中的run方法。
通過Thread類創建線程,并將實現了Runnable接口的子類對象作為參數傳遞給Thread類的構造函數。
Thread類對象調用start方法開啟線程。
public class RunnableTest implements Runnable { private int num = 100; @Override public static void main(String args[]) { |
2.兩種創建方式的對比
Runnable接口相對于繼承Thread類的好處:
1.適合多個相同程序代碼的線程去處理同意資源的情況,把虛擬CPU(線程)同程序的代碼,數據有效分離,較好的體現了面向對象的設計思想。
2.可以避免由于java的單繼承特點帶來的局限。當我們要將已經繼承了某一個類的子類放入多線程中,由于一個類不能同時有兩個父類,所以只能使用Runnable接口方法。
3.有力與程序的健壯性,代碼能給被多個線程共享,代碼與數據是獨立的。
線程的四種狀態及其轉換
同步代碼塊
1)同步的前提:
A.必須有兩個或兩個以上的線程
B.必須保證同步的線程使用同一個鎖。必須保證同步中只能有一個線程在運行。
好處與弊端:解決了多線程的安全問題。多個線程需要判斷鎖,較為消耗資源。
public class RunnableTest implements Runnable { private int num = 100; @Override public static void main(String args[]) { } |