java多執行緒例項

發表於2015-08-14
實現執行緒的方式有兩種: 1、繼承java.lang.Thread,並重寫它的run()方法,將執行緒的執行主體放入其中。 2、實現java.lang.Runnable介面,實現它的run()方法,並將執行緒的執行主體放入其中。 ==多執行緒的執行邏輯: 當主執行緒被掛起時, 其它就緒的執行緒會根據選擇最
實現執行緒的方式有兩種:
1、繼承java.lang.Thread,並重寫它的run()方法,將執行緒的執行主體放入其中。
2、實現java.lang.Runnable介面,實現它的run()方法,並將執行緒的執行主體放入其中。
==>多執行緒的執行邏輯:
當主執行緒被掛起時, 其它就緒的執行緒會根據選擇最高優先順序的來執行;
當主執行緒的掛起時間 > 子執行緒的執行時間時,子執行緒執行完後回到主執行緒,等待主執行緒醒來.
當主執行緒的掛起時間 < 子執行緒的執行時間時,主執行緒掛起時間到的,自動醒來,回到主執行緒,此時可以判斷子執行緒是否存在,若有,可stop之.
(2)
兩種方式的區別:
繼承Thread類的方式實現起來較為簡單,但是繼承它的類就不能再繼承別的類了,因此也就不能繼承別的類的有用的方法了。而使用是想Runnable 介面的方式就不存在這個問題了,而且這種實現方式將執行緒主體和執行緒物件本身分離開來,邏輯上也較為清晰,所以推薦大家更多地採用這種方式。
run()方法中包含的是執行緒的主體,也就是這個執行緒被啟動後將要執行的程式碼,它跟執行緒的啟動沒有任何關係。
上面兩種實現執行緒的方式在啟動時會有所不同。
        ThreadTest tt = new ThreadTest();  
        // 啟動執行緒  
        tt.start();  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

        // 建立一個執行緒例項  
        Thread t = new Thread(new RunnableTest());  
        // 啟動執行緒  
        t.start();   <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr>
執行緒的狀態:
      在Java 1.4及以下的版本中,每個執行緒都具有新建、可執行、阻塞、死亡四種狀態,但是在Java 5.0及以上版本中,執行緒的狀態被擴充為新建、可執行、阻塞、等待、定時等待、死亡六種。執行緒的狀態完全包含了一個執行緒從新建到執行,最後到結束的整個生 命週期。執行緒狀態的具體資訊如下: <wbr><wbr><wbr><wbr><wbr>
   1. NEW(新建狀態、初始化狀態):執行緒物件已經被建立,但是還沒有被啟動時的狀態。這段時間就是在我們呼叫new命令之後,呼叫start()方法之前。
   2. RUNNABLE(可執行狀態、就緒狀態):在我們呼叫了執行緒的start()方法之後執行緒所處的狀態。處於RUNNABLE狀態的執行緒在JAVA虛擬機器(JVM)上是執行著的,但是它可能還正在等待作業系統分配給它相應的執行資源以得以執行。
   3. BLOCKED(阻塞狀態、被中斷執行):執行緒正在等待其它的執行緒釋放同步鎖,以進入一個同步塊或者同步方法繼續執行;或者它已經進入了某個同步塊或同步 方法,在執行的過程中它呼叫了某個物件繼承自java.lang.Object的wait()方法,正在等待重新返回這個同步塊或同步方法。
   4. WAITING(等待狀態):當前執行緒呼叫了java.lang.Object.wait()、 java.lang.Thread.join()或者java.util.concurrent.locks.LockSupport.park()三個 中的任意一個方法,正在等待另外一個執行緒執行某個操作。比如一個執行緒呼叫了某個物件的wait()方法,正在等待其它執行緒呼叫這個物件的notify() 或者notifyAll()(這兩個方法同樣是繼承自Object類)方法來喚醒它;或者一個執行緒呼叫了另一個執行緒的join()(這個方法屬於 Thread類)方法,正在等待這個方法執行結束。
   5. TIMED_WAITING(定時等待狀態):當前執行緒呼叫了 java.lang.Object.wait(long timeout)、java.lang.Thread.join(long millis)、java.util.concurrent.locks.LockSupport.packNanos(long nanos)、java.util.concurrent.locks.LockSupport.packUntil(long deadline)四個方法中的任意一個,進入等待狀態,但是與WAITING狀態不同的是,它有一個最大等待時間,即使等待的條件仍然沒有滿足,只要到 了這個時間它就會自動醒來。
   6. TERMINATED(死亡狀態、終止狀態):執行緒完成執行後的狀態。執行緒執行完run()方法中的全部程式碼,從該方法中退出,進入TERMINATED狀態。還有一種情況是run()在執行過程中丟擲了一個異常,而這個異常沒有被程式捕獲,導致這個執行緒異常終止進入TERMINATED狀態。
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
(3)
例項一:



import java.io.*;
//多執行緒程式設計
public class MultiThread    
{
        public static void main(String args[])
        {
                System.out.println("我是主執行緒!");
                //下面建立執行緒例項thread1
                ThreadUseExtends thread1=new ThreadUseExtends();
                //建立thread2時以實現了Runnable介面的THhreadUseRunnable類例項為引數
                Thread thread2=new Thread(new ThreadUseRunnable(),"SecondThread");
                thread1.start();//啟動執行緒thread1使之處於就緒狀態
                //thread1.setPriority(6);//設定thread1的優先順序為6
                //優先順序將決定cpu空出時,處於就緒狀態的執行緒誰先佔領cpu開始執行
                //優先順序範圍1到10,MIN_PRIORITY,MAX_PRIORITY,NORM_PAIORITY
                //新執行緒繼承建立她的父執行緒優先順序,父執行緒通常有普通優先順序即5NORM_PRIORITY
                System.out.println("主執行緒將掛起7秒!");
                try
                {
                    <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

相關文章