java线程名_java多线程
首先講一下進程和線程的區別:
進程:每個進程都有獨立的代碼和數據空間(進程上下文),進程間的切換會有較大的開銷,一個進程包含1--n個線程。
線程:同一類線程共享代碼和數據空間,每個線程有獨立的運行棧和程序計數器(PC),線程切換開銷小。
線程和進程一樣分為五個階段:創建、就緒、運行、阻塞、終止。
多進程是指操作系統能同時運行多個任務(程序)。
多線程是指在同一程序中有多個順序流在執行。
在java中要想實現多線程,有兩種手段,一種是繼續Thread類,另外一種是實現Runable接口。
一、擴展java.lang.Thread類
1 public class threadTest extendsThread {2 privateString name;3 publicthreadTest(String name){4 this.name =name;5 }6 public voidrun(){7 for(int i = 0;i<=1000;i++){8 System.out.println(name+" "+i);9 try{10 sleep((int) Math.random()*10);11 } catch(InterruptedException e) {12 e.printStackTrace();13 }14 }15 }16 }17
18 classmain{19 public static voidmain(String[] args) {20 threadTest test = new threadTest("小明");21 threadTest test2 = new threadTest("小洪");22 test.start();23 test2.start();24 }25 }
輸出:
小明? 0
小洪? 0
小明? 1
小明? 2
小明? 3
小明? 4
小明? 5
小洪? 1
小洪? 2
小洪? 3
小洪? 4
小洪? 5
說明:
程序啟動運行main時候,java虛擬機啟動一個進程,主線程main在main()調用時候被創建。隨著調用MitiSay的兩個對象的start方法,另外兩個線程也啟動了,這樣,整個應用就在多線程下運行。
注意:start()方法的調用后并不是立即執行多線程代碼,而是使得該線程變為可運行態(Runnable),什么時候運行是由操作系統決定的。
從程序運行的結果可以發現,多線程程序是亂序執行。因此,只有亂序執行的代碼才有必要設計為多線程。
Thread.sleep()方法調用目的是不讓當前線程獨自霸占該進程所獲取的CPU資源,以留出一定時間給其他線程執行的機會。
實際上所有的多線程代碼執行順序都是不確定的,每次執行的結果都是隨機的。
但是start方法重復調用的話,會出現java.lang.IllegalThreadStateException異常。
如下:
1 classmain{2 public static voidmain(String[] args) {3 threadTest test = new threadTest("小明");4 threadTest test2 = new threadTest("小洪");5 test.start();6 test.start();7 }8 }
二、實現java.lang.Runnable接口
1 public class RunableImp implementsRunnable {2 privateString name;3 publicRunableImp(String name) {4 this.name =name;5 }6
7 @Override8 public voidrun() {9 for(int i=0;i<10;i++){10 System.out.println(name+": "+i);11 try{12 Thread.sleep((int)Math.random()*10);13 } catch(InterruptedException e) {14 e.printStackTrace();15 }16 }17 }18 }19
20 classmain1{21 public static voidmain(String[] args) {22 RunableImp imp = new RunableImp("A");23 RunableImp imp2 = new RunableImp("B");24 Thread thread = newThread(imp);25 Thread thread2 = newThread(imp2);26 thread.start();27 thread2.start();28 }29 }
輸出:
A:? 0
A:? 1
A:? 2
A:? 3
A:? 4
A:? 5
A:? 6
A:? 7
A:? 8
A:? 9
B:? 0
B:? 1
B:? 2
B:? 3
B:? 4
B:? 5
B:? 6
B:? 7
B:? 8
B:? 9
說明:
Thread2類通過實現Runnable接口,使得該類有了多線程類的特征。run()方法是多線程程序的一個約定。所有的多線程代碼都在run方法里面。Thread類實際上也是實現了Runnable接口的類。
在啟動的多線程的時候,需要先通過Thread類的構造方法Thread(Runnable target) 構造出對象,然后調用Thread對象的start()方法來運行多線程代碼。
實際上所有的多線程代碼都是通過運行Thread的start()方法來運行的。因此,不管是擴展Thread類還是實現Runnable接口來實現多線程,最終還是通過Thread的對象的API來控制線程的,熟悉Thread類的API是進行多線程編程的基礎。
三、Thread和Runnable的區別
如果一個類繼承Thread,則不適合資源共享。但是如果實現了Runable接口的話,則很容易的實現資源共享
總結
以上是生活随笔為你收集整理的java线程名_java多线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tpcc mysql下载_TPCC安装和
- 下一篇: gradle 上传jar包_gradle