java Thread類

是程序中執行的一個線程,java虛擬機容許應用程序中多個線程同時執行。java

每一個線程都有一個優先級,高優先級的線程比低優先級的線程優先執行,每一個線程均可能也可能不會被標記爲守護進程。當正在運行的代碼建立了一個新的Thread對象的時候,這個新的Thread的初始優先級等於建立它的線程的優先級。當建立它的線程是守護線程的時候,那麼它也是守護線程。安全

當java虛擬機啓動時,一般有一個非守護線程(main方法),java虛擬機繼續執行線程直到如下任何一種狀況發生:測試

1.Runtime類的exit方法被調用,而且是安全的this

2.全部的非守護線程都死亡了,從被調用的run方法返回或者fun方法拋出異常線程

建立一個新的可執行的線程有兩種方法,debug

第一種方法,建立一個類繼承Thread並重寫Thread的run方法。例如對象

class PrimeThread extends Thread {
         long minPrime;
         PrimeThread(long minPrime) {
             this.minPrime = minPrime;
         }

         public void run() {
             // compute primes larger than minPrime
              . . .
         }
}

下面的代碼能夠建立一個線程並啓動繼承

PrimeThread p = new PrimeThread(143);
     p.start();

第二種方法,建立一個類,實現Runable接口並實現Run方法接口

class PrimeRun implements Runnable {
         long minPrime;
         PrimeRun(long minPrime) {
             this.minPrime = minPrime;
         }

         public void run() {
             // compute primes larger than minPrime
              . . .
         }
}

下面的代碼能夠建立一個線程並啓動進程

PrimeRun p = new PrimeRun(143);
     new Thread(p).start();

 

每一個線程都有一個名稱,多個線程名字也可能相同, 若是在建立線程時未指定名稱,則會爲其生成一個新名稱

 

注意:兩種建立線程的方法,啓動的時候代碼不同!

 

看類中的幾個方法

yield

public static native void yield();

當前線程願意讓出CPU的提示(給調度器),可是調度器能夠忽略這個提示。這個方法不多用,只是在debug或者測試中可能有用,能夠復現bug

sleep

public static native void sleep(long millis) throws InterruptedException;

使當前正在執行的線程停留(暫停執行)指定的毫秒數,這取決於系統定時器和調度程序的精度和準確性

 

yield和sleep都不釋放鎖,yield是退讓(退讓只是退讓同優先級的,低優先級的仍是不能執行),還醒着呢,因此隨時能夠再次運行,sleep是睡覺,讓低優先級的線程有了執行的機會

 

再看wait方法,它是Object對象的方法,並非Thread類的方法

public final native void wait(long timeout) throws InterruptedException;

使當前線程等待,直到另外一個線程調用notify()或者notifyAll()方法,或者指定的時間已過。notify和notifyAll都是Object類的方法。這個方法會使當前線程把本身放進這個對象的等待集中,並釋放這個對象的鎖和同步

相關文章
相關標籤/搜索