這篇文章給大家分享的是有關(guān)java線程編程的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了海東免費(fèi)建站歡迎大家使用!
線程基礎(chǔ)
◆線程(thread)其實(shí)是控制線程(thread of control)的縮寫(xiě).
每一個(gè)線程都是獨(dú)立的,因此線程中的每個(gè)方法的局部變量都是和其他線程隔離開(kāi)的,這些變量完全是私有的,因此對(duì)于
線程而言,是沒(méi)有辦法訪問(wèn)其他線程的局部變量的。如果兩個(gè)線程同時(shí)訪問(wèn)同一個(gè)方法,則每個(gè)線程得到一個(gè)單獨(dú)的此方法的
局部變量的拷貝。
◆通過(guò)Thread類(lèi)創(chuàng)建線程
public classs test{
public void run(){
for (int i;i<100;i++){
System.out.println("hello_"+i);
}
}
}
將會(huì)輸出hello_0,一直到hello_99;
如果我們?cè)贏pplet中調(diào)用這個(gè)方法,他就會(huì)在Applet的線程中運(yùn)行。
impot java.applet.Applet;
public class test extends Applet{
public void init(){
test tt=new test();
tt.run();
}
}
如果我們想讓test的run()方法與applet的init()一起運(yùn)行,該怎么做呢?
應(yīng)該使test成為thread(java.lang.Thread)的子類(lèi).
程序修改為:
public classs test extends Thread{
public void run(){
for (int i;i<100;i++){
System.out.println("hello_"+i);
}
}
}
接下來(lái)我們還要修改Applet:
impot java.applet.Applet;
public class test extends Applet{
public void init(){
test tt=new test();
tt.start();
}
}
對(duì)ran()方法的調(diào)用變成了對(duì)start()方法的調(diào)用。
對(duì)此我們做一些說(shuō)明:
Thread
創(chuàng)建一個(gè)進(jìn)程化的對(duì)象
void run()
新創(chuàng)建的線程會(huì)執(zhí)行這個(gè)方法
void start()
創(chuàng)建一個(gè)新的線程并運(yùn)行這個(gè)線程類(lèi)中定義的run()方法。
下面我們來(lái)看一個(gè)例子
import java.awt.*;
public class TimerThread extends Thread{
Componet comp;//需要重畫(huà)的組件
int timediff;//組件重畫(huà)的間隔時(shí)間
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類(lèi)的一部分,他使得當(dāng)前線程停止一定的時(shí)間。
static void sleep(long millseconds)
睡眠時(shí)間指定為毫秒
static void sleep(long millseconds ,int nanoseconds)
睡眠時(shí)間指定為毫秒和納秒這個(gè)方法是靜態(tài)的。
線程的停止,一般不推薦使用
stop()方法,使用stop()方法是危險(xiǎn)的,將會(huì)導(dǎo)致異常。
◆使用Runable接口的線程
java語(yǔ)言使用一種稱(chēng)為接口的機(jī)制,來(lái)解決其不支持的多重繼承。
Runnable接口只使用一個(gè)方法run()方法.
public classs test implements Runnable{
public void run(){
for (int i;i<100;i++){
System.out.println("hello_"+i);
}
}
}
同時(shí)相應(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()´
}
}
◆線程周期
boolean isAlive()
用來(lái)判斷一個(gè)線程是不是活動(dòng)的
線程啟動(dòng)并不意味著線程正在運(yùn)行或可以運(yùn)行了,這是這個(gè)原因
isAlive()才經(jīng)常被用來(lái)檢測(cè)線程是否正在運(yùn)行。
簡(jiǎn)單的一段小程序
...
while(timer.isAlive())
{
try{
Thread.sleep(100);
}catch(InterruptedException e){}
}
void jion()
等待指定的線程運(yùn)行結(jié)束
當(dāng)線程不活動(dòng)時(shí),jion()才會(huì)返回
void jion(long timeout)
等待指定的線程運(yùn)行結(jié)束,但不超過(guò)指定的超時(shí)值
感謝各位的閱讀!關(guān)于“java線程編程的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!