Java多線程基礎(chǔ)

1. 前言

  這篇文章,是對Java多線程編程的基礎(chǔ)性介紹。

  文章將介紹Java語言為支持多線程編程提供的一些特性。通過這篇文章,您將了解到如何通過Java語言創(chuàng)建一個線程,如何通過內(nèi)置的鎖來實現(xiàn)線程間的同步,如何在線程間進行通信以及線程的中斷機制。

2. 什么是線程

  線程是操作系統(tǒng)調(diào)度的最小單位,在一個進程中,一般至少有一個線程在運行。一個進程中包含的多個線程,在多核處理器中,操作系統(tǒng)可以將多個線程調(diào)度到不同的CPU核心上運行,多個線程可以并行運行。

大學生就業(yè)培訓,高中生培訓,在職人員轉(zhuǎn)行培訓,企業(yè)團訓

  在同一個進程中的多個線程,共享同一個進程空間,這意味著,線程間通信的成本相對進程間會低很多,但是由于可以同時訪問同一個內(nèi)存地址,所以不正確的同步可能會導致數(shù)據(jù)競爭而發(fā)生錯誤。

3. 創(chuàng)建一個線程

  在Java中,創(chuàng)建一個線程最簡單的方式是繼承 java.lang.Thread 類。通過重寫Thread類的run()方法,可以將線程中需要執(zhí)行的代碼放到run()方法中,這樣,當這個線程被啟動以后,可以在新啟動的線程中執(zhí)行這些邏輯。

大學生就業(yè)培訓,高中生培訓,在職人員轉(zhuǎn)行培訓,企業(yè)團訓 View Code

  上面的代碼中,我們通過繼承Thread創(chuàng)建了一個SimpleThread類,然后重寫了Thread的run()方法,把需要在新的線程中執(zhí)行的邏輯放到run()方法中,當通過Thread的start()方法啟動線程以后,run()方法就會在新線程中被執(zhí)行。

  如果采用這種方式創(chuàng)建線程,那么當我們有多個不同的邏輯需要并行執(zhí)行,那么我們需要像上面一樣,通過繼承的方式創(chuàng)建多個Thread的子類,然后重寫run()方法來實現(xiàn)。這樣看來,我們其實是創(chuàng)建了多個不同類型的線程,然后啟動它們。

  除了采用繼承Thread類型,重新run()方法來創(chuàng)建線程,java還提供了一個java.lang.Runnable接口來"創(chuàng)建"多線程。準確的說,Runnable接口并沒有創(chuàng)建一個線程,而是通過實現(xiàn)Runnable接口,我們可以定義一個可以被線程執(zhí)行的任務。

<