線程的實現方法以及區別 extends Thread、implements Runable


/**
線程存在於進程當中,進程由系統創建。
創建新的執行線程有兩種方法
注意:
  線程復寫run方法,然后用start()方法調用,其實就是調用的run()方法,只是如果直接啟動run()方法,
  那么就會出現線程調用結束后再執行主函數的情況。另一種情況是用start()說多線程都在搶奪執行權,要明確的是:某一時刻,只能 有一個程序在執行,多核除外.
  同時注意線程優先級用0-5表示
    1、Real-time:實時
2、High:高
3、Above normal:高於標准
4、Normal:標准
5、Below normal:低於標准
6、Idle:空閑。
第一種:將類聲明為Thread的子類。該子類重寫Thread類的run方法,之后就可以分配並且啟動該子類的實例。
第二種:聲明實現Runnable的接口類。在該類實現run()方法,然后分配該類實例,在創建Thread時作為一個參數傳遞並啟動。Runnable為非Thread子類的類提供了一種激活的方式。
因為接口實現的Thread的接口類並不是線程,所以使用的時候要先創建該類然后創建線程並把該類對象傳進創建的線程類。
這兩種方式的區別:
第二種實現的方式,也就是實現接口,避免了但繼承的局限性,一般用這種。
還有就是線程代碼存放位置不同。接口方法:代碼放在接口子類的run()方法中;繼承方法:代碼放在Thread子類的run()方法中。
**/
class Demo extends Thread//implements Runnable
{
public void run()
{
for(int x=0;x<60;x++)
System.out.println(Thread.currentThread()+"子線程運行");
}
}
class ThreadTest1
{
public static void main(String[] args)
{
//繼承方式:extends
Demo demo= new Demo();
demo.start();
for(int x=0;x<60;x++)
System.out.println("主線程運行");
/**實現接口方式:implements
Demo demo = new Demo();
Thread td1 = new Thread(demo);
Thread td2 = new Thread(demo);
Thread td3 = new Thread(demo);
Thread td4 = new Thread(demo);
td1.start();
td2.start();
td3.start();
td4.start();
這樣的好處就是線程單獨創建,不會造成在extends中類似的困擾,就是說“票”不會重復,同時好處在上邊注釋中有說
**/
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM