JAVA之線程學習

來源:互聯網
上載者:User

標籤:調用   span   java 線程   gpo   多個   --   缺點   靜態   multi   

進程:一個應用程式在處理機上的一次執行過程,它是一個動態概念,包含一個或多個線程。

線程:是進程的一個實體,是CPU調度和指派的基本單位。

一個線程的生命週期:

  建立狀態(start())

  就緒狀態(start())

       運行狀態(run())

       阻塞狀態()

       死亡狀態(stop()或destory())

如果一個線程執行了sleep(睡眠)、suspend(掛起)等方法,失去所佔用資源之後,該線程就從運行狀態進入阻塞狀態。在睡眠時間已到或獲得裝置資源後可以重新進入就緒狀態。可以分為三種:

  • 等待阻塞:運行狀態中的線程執行 wait() 方法,使線程進入到等待阻塞狀態。

  • 同步阻塞:線程在擷取 synchronized 同步鎖失敗(因為同步鎖被其他線程佔用)。

  • 其他阻塞:通過調用線程的 sleep() 或 join() 發出了 I/O 請求時,線程就會進入到阻塞狀態。當sleep() 狀態逾時,join() 等待線程終止或逾時,或者 I/O 處理完畢,線程重新轉入就緒狀態。

線程優先順序:Java 線程的優先順序是一個整數,其取值範圍是 1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。

預設情況下,每一個線程都會分配一個優先順序 NORM_PRIORITY(5)。

 

Java線程的幾個重要方法

1.start()與run():實現線程類時無論是繼承Thread類還是實現Runnable介面,都要實現run()方法          實現具體的線程商務邏輯,但是真正啟動線程類時要注意使用start()方法,調用         run()方法並不會啟動一個線程去執行,只會當成普通的類方法來執行。
         所以start()方法會啟動2個線程運行,而run()方法只會啟動一個線程。

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

      調用方法之後線程會立即釋放佔用的資源,CPU可以轉向執行其它的線程。但是具體執      行哪個線程並不確定,所以也有可能下次還是執行當前線程。

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

4.sleep():在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)

建立線程的方法

1.通過繼承Thread類

package com.demo.thread;/*1.建立多線程:  繼承Thread方法     重寫run():查看Thread源碼有個run方法 *2.使用線程:建立子類對象,對象.start()啟動 *繼承Thread類方式的缺點:如果一個類已經從一個類繼承,則再無法繼承Thread類 * */class Thread1 extends Thread{    @Override    public void run() {        //線程體,運行一切從run開始        for(int i=0;i<5;i++){            System.out.println("兔子跑了"+i+"步");        }    }}class Thread2 extends Thread{    @Override    public void run() {        //線程體,運行一切從run開始        for(int i=0;i<5;i++){            System.out.println("烏龜跑了"+i+"步");        }    }}public class ThreadTest{    public static void main(String[] args) {        //建立子類對象        Thread1 thread1= new Thread1();        Thread2 thread2= new Thread2();        //調用start方法,啟動線程        thread1.start();        thread2.start();    }}

2.實現Runnable介面

package com.demo.thread;/*使用Runnable建立線程:避免單繼承的局限性,便於共用資源 * 1.類實現Runnable介面+重寫run()----->真實角色類 * 2.啟動多線程,使用靜態代理 *     1)建立真實角色 *  2)建立代理角色+真實動作項目參考 *  3)調用.start()啟動線程 *  *  * */class Runna implements Runnable{    @Override    public void run() {        for(int i=0;i<1000;i++){            System.out.println("一邊吃飯");        }            }    }public class RunnableTest {        public static void main(String[] args) {//             1)建立真實角色            Runna runna = new Runna();//             2)建立代理角色+真實動作項目參考            Thread proxy = new Thread(runna);//             3)調用.start()啟動線程            proxy.start();                        for(int i=0;i<1000;i++){                System.out.println("一邊玩手機");            }        }}

 

 

                            參考:菜鳥教程

                                                詳細線程介紹

JAVA之線程學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.