黑馬程序員_java基礎加強6_多線程加強

---------------------- android培訓java培訓、期待與您交流! ----------------------




1.創建線程的兩種方式:   一種方法是將類聲明爲 Thread 的子類。該子類應重寫 Thread 類的 run 方法。接下來可以分配並啓動該子類的實例。如:

class PrimeThread extends Thread{

         longminPrime;

        PrimeThread(long minPrime) {

            this.minPrime = minPrime;

         }

 

      publicvoid run() {

             // compute primes larger thanminPrime

            ?.?.?.

         }

     }

然後,下列代碼會創建並啓動一個線程:

     PrimeThreadp = new PrimeThread(143);

     p.start();

創建線程的另一種方法是聲明實現 Runnable 接口的類。該類然後實現 run 方法。然後可以分配該類的實例,在創建Thread 時作爲一個參數來傳遞並啓動。採用這種風格的同一個

例子如下所示:

     classPrimeRun implements Runnable {

 long minPrime;

        PrimeRun(long minPrime) {

            this.minPrime = minPrime;

         }

         publicvoid run() {

             //compute primes larger than minPrime

              .. .

         }     }

 然後,下列代碼會創建並啓動一個線程:

     PrimeRun p= new PrimeRun(143);

     newThread(p).start();

Thread類:

構造方法:

Thread()
          分配新的 Thread 對象。

Thread(Runnable target)
          分配新的 Thread 對象。

Thread(Runnable target, String name)
          分配新的 Thread 對象。

Thread(String name)
          分配新的 Thread 對象。

常用方法:

static Thread

currentThread()
          返回對當前正在執行的線程對象的引用。

static int

activeCount()
          返回當前線程的線程組中活動線程的數目。

 long

getId()
          返回該線程的標識符。

 String

getName()
          返回該線程的名稱。

 int

getPriority()
          返回線程的優先級。

 void

interrupt()
          中斷線程。

static boolean

interrupted()
          測試當前線程是否已經中斷。

 boolean

isAlive()
          測試線程是否處於活動狀態。

 boolean

isDaemon()
          測試該線程是否爲守護線程。

 boolean

isInterrupted()
          測試線程是否已經中斷。

 void

join()
          等待該線程終止。

 void

join(long millis)
          等待該線程終止的時間最長爲 millis 毫秒。

void

setDaemon(boolean on)
          將該線程標記爲守護線程或用戶線程。

 void

setName(String name)
          改變線程名稱,使之與參數 name 相同。

 void

setPriority(int newPriority)
          更改線程的優先級。

static void

sleep(long millis)
          在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行),此操作受到系統計時器和調度程序精度和準確性的影響。

 String

toString()
          返回該線程的字符串表示形式,包括線程名稱、優先級和線程組。

static void

yield()
          暫停當前正在執行的線程對象,並執行其他線程。

 

例子:

public class Thread1 {

   

public static void main(String[] args) {

        Thread thread = new Thread() {

            public void run() {

                while (true) {

                    try {

                        Thread.sleep(500);

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }

                    System.out.println("yi1:"

                            + Thread.currentThread().getName());

                    System.out.println("yi2:" + this.getName());

                }

            }

        };

        thread.start();

        // 下面不能用this.getName()

        Thread thread2 = new Thread(new Runnable() {

            public void run() {

                while (true) {

                    try {

                        Thread.sleep(500);

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }

                    System.out.println("er1:"

                            + Thread.currentThread().getName());

                }

            }

        });

        thread2.start();

 

        new Thread(new Runnable() {

            public void run() {

                while (true) {

                    try {

                        Thread.sleep(500);

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }

                    System.out.println("san runnable:"

                            + Thread.currentThread().getName());

 

                }

            }

        }) {

            public void run() {

                while (true) {

                    try {

                        Thread.sleep(500);

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }

                    System.out.println("san thread :"

                            + Thread.currentThread().getName());

 

                }

            }

        }.start();

    }}

運行的是Thread重寫的方法,不是Runnable中的run方法。

 






---------------------- android培訓java培訓、期待與您交流! ----------------------

詳細請查看:http://edu.csdn.net/heima

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章