java執行緒程式設計(一):執行緒基礎(轉)
java執行緒程式設計(一):執行緒基礎(轉)[@more@]在學習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)
等待指定的執行緒執行結束,但不超過指定的超時值
為深入學習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)
等待指定的執行緒執行結束,但不超過指定的超時值
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958341/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 多執行緒程式設計基礎(一)-- 執行緒的使用執行緒程式設計
- Java執行緒池一:執行緒基礎Java執行緒
- Java基礎之多執行緒程式設計Java執行緒程式設計
- Java多執行緒程式設計基礎Java執行緒程式設計
- 程式執行緒篇——程式執行緒基礎執行緒
- Java-基礎程式設計-多執行緒Java程式設計執行緒
- Java併發程式設計-執行緒基礎Java程式設計執行緒
- java多執行緒程式設計--基礎篇Java執行緒程式設計
- 多執行緒程式設計基礎(二)-- 執行緒池的使用執行緒程式設計
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒
- Java 多執行緒基礎(四)執行緒安全Java執行緒
- Java 執行緒基礎Java執行緒
- java基礎:執行緒Java執行緒
- Java - 執行緒基礎Java執行緒
- Java 多執行緒基礎(八)執行緒讓步Java執行緒
- .NET多執行緒程式設計(3):執行緒同步 (轉)執行緒程式設計
- POSIX執行緒程式設計起步(2)-執行緒同步 (轉)執行緒程式設計
- Posix執行緒程式設計指南(3)-執行緒同步 (轉)執行緒程式設計
- 多執行緒學習一(多執行緒基礎)執行緒
- 執行緒程式設計(一)執行緒程式設計
- java - 多執行緒基礎Java執行緒
- 【Java基礎】:執行緒控制Java執行緒
- Java—多執行緒基礎Java執行緒
- java基礎:執行緒同步Java執行緒
- JAVA_基礎多執行緒(一)Java執行緒
- 併發程式設計之多執行緒基礎程式設計執行緒
- 多執行緒程式設計基礎知識執行緒程式設計
- Posix執行緒程式設計指南(4)-執行緒終止 (轉)執行緒程式設計
- 多執行緒程式設計(轉)執行緒程式設計
- Java多執行緒程式設計基礎知識彙總Java執行緒程式設計
- Java 多執行緒基礎(十一)執行緒優先順序和守護執行緒Java執行緒
- 執行緒基礎執行緒
- Java 多執行緒設計模式之基礎概念Java執行緒設計模式
- Java 多執行緒基礎(六)執行緒等待與喚醒Java執行緒
- Java併發程式設計之執行緒安全、執行緒通訊Java程式設計執行緒
- [短文速讀 -5] 多執行緒程式設計引子:程式、執行緒、執行緒安全執行緒程式設計
- Java多執行緒程式設計入門(轉)Java執行緒程式設計
- Posix執行緒程式設計指南(1)-執行緒建立與取消 (轉)執行緒程式設計