Java多線程入門快速學(xué)習(xí)

Java多線程入門快速學(xué)習(xí)

長沙中公優(yōu)就業(yè)      2022-04-01 15:00:01     5

Java多線程入門快速學(xué)習(xí),多線程技術(shù)在java開發(fā)中使用的場景還是很多的,而我們使用多線程的目的就是為了提高程序的運行效率。下面我們來簡單介紹一下多線

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細介紹

多線程技術(shù)在java開發(fā)中使用的場景還是很多的,而我們使用多線程的目的就是為了提高程序的運行效率。下面我們來簡單介紹一下多線程。

1.在系統(tǒng)中,CPU通過給每個線程分配CPU時間片來實現(xiàn)這個機制,時間片是CPU分配給各個線程的時間,時間片非常短,所以CPU通過不停切換線程執(zhí)行,感覺是多線程同時執(zhí)行,時間片一般是幾十毫秒。

Thread類中start方法用來啟動線程,實現(xiàn)了多線程運行,這時無需等待run方法體代碼執(zhí)行完畢而直接繼續(xù)執(zhí)行下面的代碼。通過調(diào)用Thread類的start()方法來啟動一個線程,這時此線程處于就緒(可運行)狀態(tài),并沒有運行,一旦得到cpu時間片(執(zhí)行權(quán)),就開始執(zhí)行run()方法,這里方法run()稱為線程體,它包含了要執(zhí)行的這個線程的內(nèi)容,Run方法運行結(jié)束,此線程隨即終止。(一般面試容易問到)。

2.多線程一定快嗎

下面我們舉個栗子來看看多線程的累計操作時間

public?class?ThreadTest?{?private?static?final?long?count?=?10000L;?public?static?void?main(String[]?args)?throws?InterruptedException?{?concurrency();?serial();?}?private?static?void?concurrency()?throws?InterruptedException?{?long?start?=?System.currentTimeMillis();?Thread?thread?=?new?Thread(new?Runnable()?{?@Override?public?void?run()?{?int?a?=?0;?for(long?i?=?0;?i?

從圖表中可以看出當(dāng)并行累計不超過1億的時候串行的速度要快,主要因為并發(fā)執(zhí)行線程有創(chuàng)建和上下文切換的開銷。

 

3.如何減少上下文切換

減少上下文切換的方法有無鎖并發(fā),CAS,使用最少線程和使用協(xié)程

方法一:無鎖并發(fā)編程。多線程競爭時,會引起上下文切換,所以多線程處理數(shù)據(jù)時,可以用一些辦法來避免使用鎖,如將數(shù)據(jù)的ID按照Hash取模分段,不同的線程處理不同段的數(shù)據(jù)

方法二:CAS算法。Java的Atomic包使用CAS算法來更新數(shù)據(jù),而不需要加鎖

方法三:使用最少線程。避免創(chuàng)建不需要的線程,比如任務(wù)很少,但是創(chuàng)建了很多線程來處理,這樣會造成大量線程都處于等待狀態(tài)

方法四:協(xié)程。在單線程里實現(xiàn)多任務(wù)的調(diào)度,并在單線程里維持多個任務(wù)間的切換

4.多線程使用場景

數(shù)據(jù)庫連接池,短信郵件發(fā)放,消息通知等

5.多線程創(chuàng)建方式

 

第一種繼承Thread類重寫run方法

class CreateThread extends Thread { // run方法中編寫 多線程需要執(zhí)行的代碼 public void run() { for (int i = 0; i < 10; i++) { System.out.println("i:" + i); } }}public class ThreadDemo { public static void main(String[] args) { System.out.println("-----多線程創(chuàng)建開始-----"); // 1.創(chuàng)建一個線程 CreateThread createThread = new CreateThread(); // 2.開始執(zhí)行線程 注意 開啟線程不是調(diào)用run方法,而是start方法 System.out.println("-----多線程創(chuàng)建啟動-----"); createThread.start(); System.out.println("-----多線程創(chuàng)建結(jié)束-----"); }}

第二種實現(xiàn)Runnable接口,重寫run方法

class CreateRunnable implements Runnable {  @Override public void run() { for (inti = 0; i< 10; i++) { System.out.println("i:" + i); } } }

第三種使用匿名內(nèi)部類方式

Thread thread = new Thread(new Runnable() { public void run() { for (int i = 0; i< 10; i++) { System.out.println("i:" + i); } } });thread.start();

以上就是長沙中公優(yōu)就業(yè)java培訓(xùn)機構(gòu)的小編針對“Java多線程入門快速學(xué)習(xí)”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

 

培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹防上當(dāng)。