有的時候你可能想寫一個程序,每隔一段時間執行相關的任務,這個時候你可以使用Timer和TimerTask,非常方便。你可以參考這里。
在Java中實現一個線程有兩種方法,第一是實現Runnable接口實現它的run()方法,第二種是繼續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
}
}
這兩種方法的區別是,假如你的類已經繼續了其它的類,那么你只能選擇實現Runnable接口了,因為Java只答應單繼續的。
Java中的線程有四種狀態分別是:運行、就緒、掛起、結束。假如一個線程結束了也就說明他是一個死線程了。當你調用一個線程實例的start()的方法的時候,這個時候線程進入就緒狀態,注重并不是運行狀態,當虛擬機開始分配給他CPU的運行時間片的時候線程開始進入運行狀態,當線程進入等待狀態,例如等待某個事件發生的時候,這時候線程處于掛起狀態。
啟動一個線程你只需要調用start()方法,針對兩種實現線程的方法也有兩種啟動線程的方法,分別如下:
DoSomething doIt = new DoSomething();
Thread myThread = new Thread( doIt );
myThread.start();
DoAnotherThing doIt = new DoAnotherThing();
doIt.start();
public class MyThread implements Runnable {
PRivate boolean quit = false;
public void run(){
while( !quit ){
// do something
}
}
public void quit(){
quit = true;
}
}
public class Counter {
private int counter;
public synchronized int increment(){
return ++counter;
}
public synchronized int decrement(){
if( --counter < 0 ){
counter = 0;
}
return counter;
}
}
假如你要是想讓線程等待某個事件的發生然后繼續執行的話,那么這就涉及到線程的調度了。在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;
public Producer(CubbyHole c, int number) {
cubbyhole = c;
this.number = number;
}
public void run() {
for (int i = 0; i < 10; i++) {
cubbyhole.put(i);
System.out.println("Producer #" + this.number
+ " put: " + i);
try {
sleep((int)(Math.random() * 100));
} catch (InterruptedException e) { }
}
}
新聞熱點
疑難解答