Java多線程基礎(chǔ)
1. 前言
這篇文章,是對Java多線程編程的基礎(chǔ)性介紹。
文章將介紹Java語言為支持多線程編程提供的一些特性。通過這篇文章,您將了解到如何通過Java語言創(chuàng)建一個線程,如何通過內(nèi)置的鎖來實現(xiàn)線程間的同步,如何在線程間進(jìn)行通信以及線程的中斷機(jī)制。
2. 什么是線程
線程是操作系統(tǒng)調(diào)度的最小單位,在一個進(jìn)程中,一般至少有一個線程在運(yùn)行。一個進(jìn)程中包含的多個線程,在多核處理器中,操作系統(tǒng)可以將多個線程調(diào)度到不同的CPU核心上運(yùn)行,多個線程可以并行運(yùn)行。
在同一個進(jìn)程中的多個線程,共享同一個進(jìn)程空間,這意味著,線程間通信的成本相對進(jìn)程間會低很多,但是由于可以同時訪問同一個內(nèi)存地址,所以不正確的同步可能會導(dǎo)致數(shù)據(jù)競爭而發(fā)生錯誤。
3. 創(chuàng)建一個線程
在Java中,創(chuàng)建一個線程最簡單的方式是繼承 java.lang.Thread 類。通過重寫Thread類的run()方法,可以將線程中需要執(zhí)行的代碼放到run()方法中,這樣,當(dāng)這個線程被啟動以后,可以在新啟動的線程中執(zhí)行這些邏輯。
View Code
上面的代碼中,我們通過繼承Thread創(chuàng)建了一個SimpleThread類,然后重寫了Thread的run()方法,把需要在新的線程中執(zhí)行的邏輯放到run()方法中,當(dāng)通過Thread的start()方法啟動線程以后,run()方法就會在新線程中被執(zhí)行。
如果采用這種方式創(chuàng)建線程,那么當(dāng)我們有多個不同的邏輯需要并行執(zhí)行,那么我們需要像上面一樣,通過繼承的方式創(chuàng)建多個Thread的子類,然后重寫run()方法來實現(xiàn)。這樣看來,我們其實是創(chuàng)建了多個不同類型的線程,然后啟動它們。
除了采用繼承Thread類型,重新run()方法來創(chuàng)建線程,java還提供了一個java.lang.Runnable接口來"創(chuàng)建"多線程。準(zhǔn)確的說,Runnable接口并沒有創(chuàng)建一個線程,而是通過實現(xiàn)Runnable接口,我們可以定義一個可以被線程執(zhí)行的任務(wù)。
<