java
上一篇 / 下一篇 2006-12-04 13:03:08 / 个人分类:转载
有的时候你可能想写一个程序,每隔一段时间执行相关的任务,这个时候你可以使用Timer和TimerTask,非常方便。你可以参考这里。★黑基空间★kA1b:]5SH;s}
在Java中实现一个线程有两种方法,第一是实现Runnable接口实现它的run()方法,第二种是继承Thread类,覆盖它的run()方法。下面是代码示例:★黑基空间★]M;e#u4X_!oB6N
4nW?r1xLc0 public class DoSomething implements Runnable {
k'tw5B:o0 public void run(){★黑基空间★3yG9NQv_!K
// here is where you do something
aziC r_0 }★黑基空间★-n6} R[U w
}
d&C$S
W gJ9^%\0 public class DoAnotherThing extends Thread {★黑基空间★}tdU X[
public void run(){
A;L6`sVa4Y0 // here is where you do something★黑基空间★@/D f:uY$R'R
}★黑基空间★w&O}qw\LJz
} ★黑基空间★8m%v*],Gn;[d9W
★黑基空间★3Mhveo\
这两种方法的区别是,如果你的类已经继承了其它的类,那么你只能选择实现Runnable接口了,因为Java只允许单继承的。
Java中的线程有四种状态分别是:运行、就绪、挂起、结束。如果一个线程结束了也就说明他是一个死线程了。当你调用一个线程实例的start()的方法的时候,这个时候线程进入就绪状态,注意并不是运行状态,当虚拟机开始分配给他CPU的运行时间片的时候线程开始进入运行状态,当线程进入等待状态,例如等待某个事件发生的时候,这时候线程处于挂起状态。
C F3r-I&TK(m0启动一个线程你只需要调用start()方法,针对两种实现线程的方法也有两种启动线程的方法,分别如下:
c]!tS.RoG#Xd U0★黑基空间★1P un"O5Zg2[ ^U
DoSomething doIt = new DoSomething();★黑基空间★a1g:\A!s'F)nN\#@+h
Thread myThread = new Thread( doIt );
&i
BAT6_q@0 myThread.start();
:ss)M)C7szhx0 DoAnotherThing doIt = new DoAnotherThing();★黑基空间★YRQ;c&v}b3U*@8W
doIt.start();
,a+o5JSw(s~*}0 ★黑基空间★1Dz+?q{r.bA
-\^.C{V]0 由于安全等因素Thread中的stop()方法已经不推荐使用了,因此如果你想要停止一个线程的时候可以通过设置一个信号量,例如:★黑基空间★E]5A G1o xbk:x
S-@D+C.JnpY0 public class MyThread implements Runnable {
o4mh"A.[S#w0 private boolean quit = false;
KT+dnq5T0 public void run(){
-?;{^3|9Q0 while( !quit ){★黑基空间★ BD8a@[5Q
// do something
Jpd/k$W8G,v0 }★黑基空间★!v0b+^B1A'h6} }7s%l
}
public void quit(){★黑基空间★ R~8[9G
i
quit = true;
N,uH"l&}0 }
b6]l?#Vq6T P$f]J0 }
4t#@*|Is
u;a0 ★黑基空间★|
gcVmWj
如果每个线程只做它自己的事情,那么就很简单了,但是有的时候几个线程可能要同时访问一个对象并可能对它进行修改,这个时候你必须使用线程的同步在方法或者代码块使用关键字synchronized,例如:★黑基空间★W C.Gw c*CW"E