java線程編程的示例分析

這篇文章給大家分享的是有關(guān)java線程編程的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了海東免費建站歡迎大家使用!

線程基礎(chǔ)

◆線程(thread)其實是控制線程(thread of control)的縮寫.
每一個線程都是獨立的,因此線程中的每個方法的局部變量都是和其他線程隔離開的,這些變量完全是私有的,因此對于
線程而言,是沒有辦法訪問其他線程的局部變量的。如果兩個線程同時訪問同一個方法,則每個線程得到一個單獨的此方法的
局部變量的拷貝。

◆通過Thread類創(chuàng)建線程

public classs test{
public void run(){
for (int i;i<100;i++){
System.out.println("hello_"+i);
}
}
}

將會輸出hello_0,一直到hello_99;
如果我們在Applet中調(diào)用這個方法,他就會在Applet的線程中運行。
impot java.applet.Applet;

public class test extends Applet{
public void init(){
test tt=new test();
tt.run();
}
}


如果我們想讓test的run()方法與applet的init()一起運行,該怎么做呢?
應(yīng)該使test成為thread(java.lang.Thread)的子類.
程序修改為:
public classs test extends Thread{
public void run(){
for (int i;i<100;i++){
System.out.println("hello_"+i);
}
}
}
接下來我們還要修改Applet:
impot java.applet.Applet;

public class test extends Applet{
public void init(){
test tt=new test();
tt.start();

}
}
對ran()方法的調(diào)用變成了對start()方法的調(diào)用。

對此我們做一些說明:
Thread
創(chuàng)建一個進(jìn)程化的對象
void run()
新創(chuàng)建的線程會執(zhí)行這個方法
void start()
創(chuàng)建一個新的線程并運行這個線程類中定義的run()方法。

下面我們來看一個例子

import java.awt.*;

public class TimerThread extends Thread{
Componet comp;//需要重畫的組件
int timediff;//組件重畫的間隔時間
volatile boolean shouldrun;//設(shè)為false為停止線程


public TimerThread (Compond comp,int timediff){
this.comp = comp;
this.timediff = timedifff;
shouldrun = true;
}


public void run(){
while(shouldrun){
try{
comp.repaint();
sleep(timediff);
}catch(Exception e){}

}

}
}
sleep()方法是Thread類的一部分,他使得當(dāng)前線程停止一定的時間。
static void sleep(long millseconds)
睡眠時間指定為毫秒
static void sleep(long millseconds ,int nanoseconds)
睡眠時間指定為毫秒和納秒這個方法是靜態(tài)的。


線程的停止,一般不推薦使用
stop()方法,使用stop()方法是危險的,將會導(dǎo)致異常。



◆使用Runable接口的線程
java語言使用一種稱為接口的機制,來解決其不支持的多重繼承。
Runnable接口只使用一個方法run()方法.

public classs test implements Runnable{
public void run(){
for (int i;i<100;i++){
System.out.println("hello_"+i);
}
}
}

同時相應(yīng)的程序修改為:
impot java.applet.Applet;

public class test extends Applet{
public void init(){
Runnable tt=new test();
Thread th= new Thread(tt);
th.start()&acute;

}
}

◆線程周期

boolean isAlive()
用來判斷一個線程是不是活動的
線程啟動并不意味著線程正在運行或可以運行了,這是這個原因
isAlive()才經(jīng)常被用來檢測線程是否正在運行。


簡單的一段小程序

...
while(timer.isAlive())
{
try{
Thread.sleep(100);
}catch(InterruptedException e){}
}

void jion()
等待指定的線程運行結(jié)束
當(dāng)線程不活動時,jion()才會返回

void jion(long timeout)
等待指定的線程運行結(jié)束,但不超過指定的超時值

感謝各位的閱讀!關(guān)于“java線程編程的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

當(dāng)前名稱:java線程編程的示例分析
文章源于:http://bm7419.com/article34/iicdse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站改版、靜態(tài)網(wǎng)站、電子商務(wù)搜索引擎優(yōu)化、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司