線程是進程中的壹個實體,是由系統獨立調度的基本單元。線程本身基本上不擁有系統資源,但它可以與屬於同壹進程的其他線程共享該進程擁有的所有資源。所以線程是輕量級的任務,它們之間的通信和轉換只需要較少的系統開銷。
Java支持多線程編程,所以用Java寫的應用程序可以同時執行多個任務。Java的多線程機制使用起來非常方便,用戶只需要關註程序細節的實現,不用擔心後臺的多任務系統。
在Java語言中,線程被表示為線程類。線程Thread類封裝了所有必要的線程操作控制。在設計程序時,需要明確區分線程對象和運行線程,線程對象可以看作是運行線程的控制板。在壹個線程對象中,有很多方法可以控制壹個線程是運行、休眠、掛起還是停止。線程類是控制線程行為的唯壹手段。壹旦Java程序啟動,就已經有壹個線程在運行了。您可以調用Thread.currentThread方法來查看當前正在運行哪個線程。
類ThreadTest{
公共靜態void main(String args[]){
thread t = thread . currentthread();
T.setName("單線程");//將線程命名為“單線程”
t . set priority(8);
//設置線程優先級為8,最高為10,最低為1,默認為5。
System.out.println("正在運行的線程:"+t);
//顯示線程信息
嘗試{
for(int I = 0;我& lt3;i++){
System.out.println("睡眠時間"+I);
thread . sleep(100);//睡眠100毫秒
}
} catch(中斷的異常e){//捕捉異常。
System.out.println("線程有錯");
}
}
}
多線程的實現方法
繼承線程類
可以通過繼承Thread類並在其中重寫run()方法來定義線程體實現線程的特定行為,然後創建這個子類的對象來創建線程。
重寫run()方法,在繼承Thread類的ThreadSubclassName子類中定義線程體。壹般格式是:
公共類ThreadSubclassName擴展Thread{
public ThreadSubclassName(){
.....//寫子類的構造方法,可以默認。
}
公共無效運行(){
.....//編寫自己的線程代碼
}
}
使用定義的線程子類ThreadSubclassName創建線程對象的壹般格式為:
thread subclass name ThreadObject =
new thread subclass name();
然後,您可以啟動由thread對象表示的線程:
thread object . start();//啟動線程
應用繼承線程的方法實現多線程程序。這個程序創建了三個獨立的線程,它們打印自己的“Hello World!”。
類ThreadDemo擴展線程{
私有字符串whoami
私有int延遲;
public ThreadDemo(String s,int d){
whoami = s;
延遲= d;
}
公共無效運行(){
嘗試{
睡眠(延遲);
}catch(中斷異常e)
System.out.println("Hello World!"+ whoami
+ " " +延時);
}
}
公共類多線程{
公共靜態void main(String args[]){
ThreadDemo t1,t2,T3;
t 1 = new thread demo(" thread 1 ",
(int)(math . random()* 2000));
t2 = new ThreadDemo("Thread2 ",
(int)(math . random()* 2000));
t3 = new ThreadDemo("Thread3 ",
(int)(math . random()* 2000));
t 1 . start();
T2 . start();
T3 . start();
}
}
實現可運行接口
編寫多線程程序的另壹種方法是實現Runnable接口。在壹個類中實現壹個Runnable接口(以下簡稱Runnable類),在這個類中定義壹個run()方法,然後用帶Runnable參數的線程類構造函數創建壹個線程。
創建線程對象可以通過以下兩個步驟完成:
(1)生成可運行類ClassName的對象。
class name runnable object = new class name();
(2)用帶Runnable參數的線程類構造方法創建壹個線程對象。指向新創建線程的指針將指向Runnable類的壹個實例。使用Runnable類的實例為線程提供run()方法-線程體。
Thread ThreadObject =新線程(runnable object);
然後,您可以啟動由ThreadObject threadobject表示的線程:
thread object . start();
在Thread類中用Runnable接口構造方法有:
公共線程(可運行目標);
公共線程(可運行目標,字符串名);
公共線程(字符串名);
公共線程(ThreadGroup組,Runnable目標);
公共線程(ThreadGroup組,可運行目標,
字符串名);
其中,參數Runnable target表示線程在執行時運行target的run()方法,String name構造指定名稱的線程,ThreadGroup group表示創建線程組。
具有可運行接口的多線程。
TwoThread類實現Runnable{
兩個線程(){
thread t 1 = thread . currentthread();
T1.setName("第壹個主線程");
System.out.println("運行線程:"+t 1);
線程t2 =新線程(這個,“第二線程”);
System.out.println("創建第二個線程");
T2 . start();
嘗試{
System.out.println("第壹個線程休眠");
thread . sleep(3000);
}catch(InterruptedException e){
System.out.println("第壹個線程出錯");
}
System.out.println("第壹線程退出");
}
公共無效運行(){
嘗試{
for(int I = 0;我& lt5;i++){
System.out.println("第二線程的睡眠時間:"
+I);
thread . sleep(1000);
}
}catch(InterruptedException e){
System.out.println("線程錯誤");
}
System.out.println("第二個線程退出");
}
公共靜態void main(String args[]){
new two thread();
}
}
程序運行結果如下:
運行線程:Thread[第壹個主線程,5,main]
創建第二個線程
第壹個線程休眠。
第二個線程的休眠時間:0
第二個線程的休眠時間:1
第二個線程的休眠時間:2
第壹個線程退出。
第二個線程的休眠時間:3
第二個線程的睡眠時間:4
第二個線程退出。
另外,虛擬機群上的產品團購超級便宜。