 線程是java的內嵌特性,線程并不輕易把握,有專門介紹Java線程的書籍,讀者可以參考。由此可見Java線程的重要性,本文將具體介紹線程的基本知識。
線程是java的內嵌特性,線程并不輕易把握,有專門介紹Java線程的書籍,讀者可以參考。由此可見Java線程的重要性,本文將具體介紹線程的基本知識。 
有的時候你可能想寫一個程序,每隔一段時間執(zhí)行相關的任務,這個時候你可以使用Timer和TimerTask,非常方便。你可以參考使用Java中的Timer和TimerTask。
     在Java中實現一個線程有兩種方法,第一是實現Runnable接口實現它的run()方法,第二種是繼續(xù)Thread類,覆蓋它的run()方法。下面是代碼示例:
public class DoSomething implements Runnable {
    public void run(){
     // here is where you do something
    }
}
public class DoAnotherThing extends Thread {
    public void run(){
 // here is where you do something
    }
}
這兩種方法的區(qū)別是,假如你的類已經繼續(xù)了其它的類,那么你只能選擇實現Runnable接口了,因為Java只答應單繼續(xù)的。
Java中的線程有四種狀態(tài)分別是:運行、就緒、掛起、結束。假如一個線程結束了也就說明他是一個死線程了。當你調用一個線程實例的start()的方法的時候,這個時候線程進入就緒狀態(tài),注重并不是運行狀態(tài),當虛擬機開始分配給他CPU的運行時間片的時候線程開始進入運行狀態(tài),當線程進入等待狀態(tài),例如等待某個事件發(fā)生的時候,這時候線程處于掛起狀態(tài)。
     啟動一個線程你只需要調用start()方法,針對兩種實現線程的方法也有兩種啟動線程的方法,分別如下:
DoSomething doIt = new DoSomething();
Thread myThread = new Thread( doIt );
myThread.start();
DoAnotherThing doIt = new DoAnotherThing();
doIt.start();
由于安全等因素Thread中的stop()方法已經不推薦使用了,因此假如你想要停止一個線程的時候可以通過設置一個信號量,例如:
public class MyThread implements Runnable {
    PRivate boolean quit = false;
    public void run(){
    while( !quit ){
     // do something
    }
    }
    public void quit(){
     quit = true;
    }
}
    假如每個線程只做它自己的事情,那么就很簡單了,但是有的時候幾個線程可能要同時訪問一個對象并可能對它進行修改,這個時候你必須使用線程的同步在方法或者代碼塊使用要害字synchronized,例如:
public class Counter {
    private int counter;
    public synchronized int increment(){
 return ++counter;
    }
    public synchronized int decrement(){
 if( --counter < 0 ){
     counter = 0;
 }
 return counter;
    }
}
每個java對象都可以最為一個監(jiān)視器,當線程訪問它的synchronized方法的時候,他只答應在一個時間只有一個線程對他訪問,讓其他得線程排隊等候。這樣就可以避免多線程對共享數據造成破壞。記住synchronized是會耗費系統(tǒng)資源降低程序執(zhí)行效率的,因此一定要在需要同步的時候才使用,尤其在J2ME的開發(fā)中要小心。假如你要是想讓線程等待某個事件的發(fā)生然后繼續(xù)執(zhí)行的話,那么這就涉及到線程的調度了。在java中通過wait(),notify(),notifyAll()來實現,這三個方法是在Object類中定義的,當你想讓線程掛起的時候調用obj.wait()方法,在同樣的obj上調用notify()則讓線程重新開始運行。
      最后以SUN提供的ProdUCer/Consumer的例子來結束這篇文章,內容是Producer產生一個數字而Consumer消費這個數字,這個小程序里面基本覆蓋了本文所有的知識點。請具體研究一下代碼
public class Producer extends Thread {
    private CubbyHole cubbyhole;
    private int number;
新聞熱點
疑難解答