多進程:在操作系統中能(同時)運行多個任務(程序)
多線程:在同一應用程序中有多個順序流(同時)執行
線程(thread)的執行過程
首先生成線程(New),然后進入就緒狀態(Runable),和其他線程一起搶占cpu執行的時間。搶到cpu執行的時間后,進入運行狀態(Running),在運行過程中cpu執行的時間可能會被其他線程搶占了,該線程則又進入就緒狀態,等待下一次搶占cpu執行的時間。線程在運行過程中可能會遇到阻塞事件,解除阻塞狀態后則又進入就緒狀態。線程代碼運行完畢后進入死亡狀態(Dead)
創建線程的方法:
① 定義一個線程類,繼承Thread類并重寫其中的run()方法,run()方法稱為線程體。由于java只支持單繼承,用這種方法定義的類不能再繼承其他類。
class FirstThread extends Thread{public void run(){for(int i = 0;i < 100;i++){System.out.class Test{public static void main(String args[]){//生成線程類的對象FirstThread ft = new FirstThread();//啟動線程,進入就緒狀態,與main線程搶占cpu//ft.run();不能這樣寫!ft.start();//main線程for(int i =0;i < 100;i++){System.out.println("main-->" + i);}//兩個for循環運行在不同的線程當中}}
一旦運行Test類,在程序中存在三個線程:main線程,ft線程,垃圾回收線程。main和ft線程交替運行。多線程運行的結果沒有規律,每次結果不同
②定義一個實現接口Runnable的類作為線程的目標對象,在初始化一個Thread類或者Thread子類的線程對象時,把目標對象傳遞給線程實例,由該目標對象提供線程體。
//定義用于實現接口Runnable的類class RunnableImp implements Runnable{//復寫Runnable唯一的方法runpublic void run(){for(int i = 0;i < 10; i++){System.out.println("Runnable-->" + i);}}}class Test{public static void main(String args[]){//生成RunnableImp的對象RunnableImp ri = new RunnableImp(); //ri代表線程體//將ri傳入,生成Thread對象Thread t = new Thread(ri); //t代表一個線程//調用Thread的start方法t.start();}}
新聞熱點
疑難解答