黑馬程式設計師Java培訓和Android培訓:多執行緒

打的去看海的豬發表於2011-07-29
 

Thread.currentThread().getName()

 

同步程式碼塊

同步函式

程式碼塊和函式的同步

 

函式是通過this來做標誌位的選擇

 

死鎖

 

執行緒間的通訊的問題。

wait()

notify()

notify All

 

怎麼樣控制其生命週期

 

實現多執行緒的2種方式:1.從Thread類繼承 2.實現Runnable的介面

一般推薦使用第二種方法

 

 

 static Thread  currentThread()方法  可以獲取當前正在執行的執行緒

getName( ) 得到執行緒的名字  這個方法是從Thread類中繼承而來

要新建立一個執行緒,必須建立Thread的一個派生類,派生類中重寫 run的方法,執行緒的程式碼放在run方法中

新建立了一個執行緒的例項 要想啟動這個執行緒 必須用start()方法 啟動了start方法  JVM會自動run方法

 

SetDaemon(true/false)設定後臺執行緒  而且必須在Start()之前就必須呼叫

static void yield() 可以讓一個執行緒暫停,讓其他執行緒執行

getPriority()  得到執行緒的優先順序

setPriority(引數)   設定執行緒的優先順序  引數可為: static int MAX_PRIORITY  用表示10

                                              static int MIN_PRIORITY  用表示 1

                                            static int NORM_PRIORITY  用5表示

 

一個內部類來繼承Thread方法

package Test;

public class machine

{

    public static void main(String [] args)

    {

       MyThread pa=new MyThread();

       pa.getInner().start();

       System.out.println("thr Thread name is:"+Thread.currentThread().getName());

    }

}

 

class MyThread

{

private    class InnerThread extends Thread

    {

        public void run()

           {

              System.out.println(Thread.currentThread().getName());

          

           }

    }

 

Thread getInner()

{

    return new InnerThread();

}

 

}

 

 

用實現Runnable的方法如下

package Test;

public class machine

{

    public static void main(String [] args)

    {

       MyThread pa=new MyThread();

    new Thread(pa).start();

       System.out.println("the Thread name is:"+Thread.currentThread().getName());

    }

}

 

class MyThread implements Runnable

{  

 

        public void run()

           {

              System.out.println("the thread name is "+Thread.currentThread().getName());

            

           }

   

 

 

}

 

 

同步的兩種方式:1同步塊 2 同步方法

每一個物件都監視器 或者叫鎖   同步塊的實現模式

同步的方法是利用this所代表物件的鎖     同步方法的實現模式

每個class也有一個鎖,是這個class物件的Class物件的鎖  抽象的類的同步實現

 

練習  火車票售票系統

 

 

package Test;

public class machine

{

public static void main(String [] args)

{

    sellThread p= new sellThread();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

    new Thread(p).start();

   

}

}

class sellThread implements Runnable

{ int ticket=100;

Object obj= new Object();

    public  void run()

    {

       while(true)

       {

          

      

       synchronized(obj)

       {

    if(ticket>0)

    {

       System.out.println(Thread.currentThread().getName()+"sell the "+ticket);

       ticket--;

    }

      

    }

      

    }

    }

 

}

 

解決死鎖問題用到的函式

 

wait( )   notify()   notifyAll() 這個3個方法是Object中的方法  不是Thread中的方法 ,而且只能在同步方法或者同步塊中呼叫

這三個函式主要用於producer-consumer關係

執行緒的終止: 設定flag變數 結合 interrupt()方法

 

相關文章