什么時(shí)候讓線(xiàn)程實(shí)現Runnable接口,什么時(shí)候讓線(xiàn)程繼承Thread類(lèi)?
JDK幫助文檔中的原話(huà):Runnable 接口應該由那些打算通過(guò)某一線(xiàn)程執行其實(shí)例的類(lèi)來(lái)實(shí)現
(不明白是啥意思)
孫鑫老師的原話(huà):當不需要改變一個(gè)線(xiàn)程中除了run()方法以外的其他方法時(shí),讓線(xiàn)程實(shí)現Runnable接口。
(明白是什么意思,但不知道有什么用 汗!!!)
如果讓一個(gè)線(xiàn)程實(shí)現Runnable接口,那么當調用這個(gè)線(xiàn)程的對象開(kāi)辟多個(gè)線(xiàn)程時(shí),可以讓這些線(xiàn)程調用同一個(gè)變量;若這個(gè)線(xiàn)程是由繼承Thread類(lèi)而來(lái),則要通過(guò)內部類(lèi)來(lái)實(shí)現上述功能,利用的就是內部類(lèi)可任意訪(fǎng)問(wèn)外部變量這一特性。
例子程序:
public class ThreadTest
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
new Thread(mt).start(); //通過(guò)實(shí)現Runnable的類(lèi)的對象來(lái)開(kāi)辟第一個(gè)線(xiàn)程
new Thread(mt).start(); //通過(guò)實(shí)現Runnable的類(lèi)的對象來(lái)開(kāi)辟第二個(gè)線(xiàn)程
new Thread(mt).start(); //通過(guò)實(shí)現Runnable的類(lèi)的對象來(lái)開(kāi)辟第三個(gè)線(xiàn)程
//由于這三個(gè)線(xiàn)程是通過(guò)同一個(gè)對象mt開(kāi)辟的,所以run()里方法訪(fǎng)問(wèn)的是同一個(gè)index
}
}
class MyThread implements Runnable //實(shí)現Runnable接口
{
int index=0;
public void run()
{
for(;index<=200;)
System.out.println(Thread.currentThread().getName()+":"+index++);
}
}
------------------------------------------------------------------------------------------------------------------------------------
public class ThreadTest
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
mt.getThread().start(); //通過(guò)返回內部類(lèi)的對象來(lái)開(kāi)辟第一個(gè)線(xiàn)程
mt.getThread().start(); //通過(guò)返回內部類(lèi)的對象來(lái)開(kāi)辟第二個(gè)線(xiàn)程
mt.getThread().start(); //通過(guò)返回內部類(lèi)的對象來(lái)開(kāi)辟第三個(gè)線(xiàn)程
//由于這三個(gè)線(xiàn)程是通過(guò)同一個(gè)匿名對象來(lái)開(kāi)辟的,所以run()里方法訪(fǎng)問(wèn)的是同一個(gè)index
}
}
聯(lián)系客服