程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java線程編程(一):線程基礎

java線程編程(一):線程基礎

編輯:關於JAVA

在學習java中,我發現有關於對線程的講解比較少,我打算為一些java初學者提一些關於線程方面的參考,

為深入學習java奠定基礎。我本著共同進步的原則特寫下了關於java線程編程的一系列文章

java線程編程(一):線程基礎

◆線程(thread)其實是控制線程(thread of control)的縮寫.

每一個線程都是獨立的,因此線程中的每個方法的局部變量都是和其他線程隔離開的,這些變量完全是私有的,因此對於

線程而言,是沒有辦法訪問其他線程的局部變量的。如果兩個線程同時訪問同一個方法,則每個線程得到一個單獨的此方法的

局部變量的拷貝。

◆通過Thread類創建線程

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

將會輸出hello_0,一直到hello_99;

如果我們在Applet中調用這個方法,他就會在Applet的線程中運行。

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

如果我們想讓test的run()方法與applet的init()一起運行,該怎麼做呢?

應該使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()方法的調用變成了對start()方法的調用。

對此我們做一些說明:

Thread

創建一個進程化的對象

void run()

新創建的線程會執行這個方法

void start()

創建一個新的線程並運行這個線程類中定義的run()方法。

下面我們來看一個例子

import java.awt.*;
public class TimerThread extends Thread{
Componet comp;//需要重畫的組件
int timediff;//組件重畫的間隔時間
volatile boolean shouldrun;//設為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類的一部分,他使得當前線程停止一定的時間。

static void sleep(long millseconds)

睡眠時間指定為毫秒

static void sleep(long millseconds ,int nanoseconds)

睡眠時間指定為毫秒和納秒這個方法是靜態的。

線程的停止,一般不推薦使用

stop()方法,使用stop()方法是危險的,將會導致異常。

◆使用Runable接口的線程

java語言使用一種稱為接口的機制,來解決其不支持的多重繼承。

Runnable接口只使用一個方法run()方法.

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

同時相應的程序修改為:

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()

用來判斷一個線程是不是活動的

線程啟動並不意味著線程正在運行或可以運行了,這是這個原因

isAlive()才經常被用來檢測線程是否正在運行。

簡單的一段小程序

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

等待指定的線程運行結束

當線程不活動時,jion()才會返回

void jion(long timeout)

等待指定的線程運行結束,但不超過指定的超時值

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved