java基礎——線程

來源:互聯網
上載者:User

標籤:bsp   一個   結束   image   通過   空格   支援   一個人   視窗   

第1章  多線程1.1  多線程介紹

學習多線程之前,我們先要瞭解幾個關於多線程有關的概念。

進程:進程指正在啟動並執行程式。確切的來說,當一個程式進入記憶體運行,即變成一個進程,進程是處於運行過程中的程式,並且具有一定獨立功能。

線程:線程是進程中的一個執行單元,負責當前進程中程式的執行,一個進程中至少有一個線程。一個進程中是可以有多個線程的,這個應用程式也可以稱之為多線程程式。

簡而言之:一個程式運行後至少有一個進程,一個進程中可以包含多個線程

 

什麼是多線程呢?即就是一個程式中有多個線程在同時執行。

通過來區別單線程程式與多線程程式的不同:

l 單線程程式:即,若有多個任務只能依次執行。當上一個任務執行結束後,下一個任務開始執行。如,去網吧上網,網吧只能讓一個人上網,當這個人下機後,下一個人才能上網。

l 多線程程式:即,若有多個任務可以同時執行。如,去網吧上網,網吧能夠讓多個人同時上網。

1.2 程式運行原理

l 分時調度

所有線程輪流使用 CPU 的使用權,平均分配每個線程佔用 CPU 的時間。

l 搶佔式調度

優先讓優先順序高的線程使用 CPU,如果線程的優先順序相同,那麼會隨機播放一個(線程隨機性),Java使用的為搶佔式調度。

1.2.1  搶佔式調度詳解

大部分作業系統都支援多進程並發運行,現在的作業系統幾乎都支援同時運行多個程式。比如:現在我們上課一邊使用編輯器,一邊使用錄屏軟體,同時還開著畫圖板,dos視窗等軟體。此時,這些程式是在同時運行,”感覺這些軟體好像在同一時刻運行著“。

 

實際上,CPU(中央處理器)使用搶佔式調度模式在多個線程間進行著高速的切換。對於CPU的一個核而言,某個時刻,只能執行一個線程,而 CPU的在多個線程間切換速度相對我們的感覺要快,看上去就是在同一時刻運行。

其實,多線程程式並不能提高程式的運行速度,但能夠提高程式運行效率,讓CPU的使用率更高。

 

1.3 主線程

 

回想我們以前學習中寫過的代碼,當我們在dos命令列中輸入java空格類名斷行符號後,啟動JVM,並且載入對應的class檔案。虛擬機器並會從main方法開始執行我們的程式碼,一直把main方法的代碼執行結束。如果在執行過程遇到迴圈時間比較長的代碼,那麼在迴圈之後的其他代碼是不會被馬上執行的。

class Demo{    String name;    Demo(String name){        this.name = name;    }    void show()    {        for (int i=1;i<=10000 ;i++ )        {            System.out.println("name="+name+",i="+i);        }    }}class ThreadDemo {    public static void main(String[] args)     {        Demo d = new Demo("小強");         Demo d2 = new Demo("旺財");        d.show();                d2.show();        System.out.println("Hello World!");    }}

若在上述代碼中show方法中的迴圈執行次數很多,這時在d.show();下面的代碼是不會馬上執行的,並且在dos視窗會看到不停的輸出name=小強,i=值,這樣的語句。為什麼會這樣呢?

原因是:jvm啟動後,必然有一個執行路徑(線程)從main方法開始的,一直執行到main方法結束,這個線程在java中稱之為主線程。當程式的主線程執行時,如果遇到了迴圈而導致程式在指定位置停留時間過長,則無法馬上執行下面的程式,需要等待迴圈結束後能夠執行

那麼,能否實現一個主線程負責執行其中一個迴圈,再由另一個線程負責其他代碼的執行,最終實現多部分代碼同時執行的效果?

能夠實現同時執行,通過Java中的多線程技術來解決該問題。

 

1.4 Thread類

該如何建立線程呢?通過API中搜尋,查到Thread類。通過閱讀Thread類中的描述。Thread是程式中的執行線程。Java 虛擬機器允許應用程式並發地運行多個執行線程。

建立新執行線程有兩種方法。

l 一種方法是將類聲明為 Thread 的子類。該子類應重寫 Thread 類的 run 方法。建立對象,開啟線程。run方法相當於其他線程的main方法。

l 另一種方法是聲明一個實現 Runnable 介面的類。該類然後實現 run 方法。然後建立Runnable的子類對象,傳入到某個線程的構造方法中,開啟線程。

 

1.5 建立線程方式一       繼承Thread類

 

建立線程的步驟:

 

1 定義一個類繼承Thread。

 

2 重寫run方法。

 

3 建立子類對象,就是建立線程對象。

 

4 調用start方法,開啟線程並讓線程執行,同時還會告訴jvm去調用run方法

 

 

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.