黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java多線程入門快速學(xué)習(xí)

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

更新時(shí)間:2020-07-09 14:56:35 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1982次

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

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

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

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

2.多線程一定快嗎

下面我們舉個(gè)栗子來看看多線程的累計(jì)操作時(shí)間

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)并行累計(jì)不超過1億的時(shí)候串行的速度要快,主要因?yàn)椴l(fā)執(zhí)行線程有創(chuàng)建和上下文切換的開銷。

 

3.如何減少上下文切換

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

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

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

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

方法四:協(xié)程。在單線程里實(shí)現(xiàn)多任務(wù)的調(diào)度,并在單線程里維持多個(gè)任務(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)建一個(gè)線程
 CreateThread createThread = new CreateThread();
 // 2.開始執(zhí)行線程 注意 開啟線程不是調(diào)用run方法,而是start方法
 System.out.println("-----多線程創(chuàng)建啟動(dòng)-----");
 createThread.start();
 System.out.println("-----多線程創(chuàng)建結(jié)束-----");
 }
}

第二種實(shí)現(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();

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java多線程入門快速學(xué)習(xí)”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

 

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧美啪啪一区 | 羞羞视频免费在线观看 | 免费国产成人高清无线看软件 | 嘿嘿视频在线 | 欧美色图综合 | 亚洲一区在线观看视频 | 日本亚洲欧美美色 | 欧美色欧美亚洲高清在线视频 | 国产黄色小视频 | 中文字幕一区二区三区四区 | 伊人婷婷色香五月综合缴激情 | 欧美涩区 | 欧美ay亚洲ay日韩ay | 国产欧美在线不卡 | 国产无遮挡裸体免费视频在线观看 | 黄色片视频在线播放 | 免费看黄色一级 | 免费一级欧美片在线观免看 | 中文字幕日本不卡一二三区 | 瑟瑟网站免费网站入口 | 亚欧乱色视频 视频在线 | www视频在线免费观看 | 我要看一级黄色毛片 | 免费簧网站永久在线播放国产 | 中国一级毛片免费观看 | 成人日b视频 | 麻豆成人久久精品二区三区小说 | 久操精品在线 | 特级毛片a级毛免费播放 | 性生活一区 | 一区二区免费在线观看 | 日韩伦理片在线观看光棍影院 | www久久只有这里有精品 | 中文字幕在线导航 | 国产免费黄色片 | 国产香蕉一本大道 | 免费羞羞网站视频 | 亚洲大成色www永久网址 | 黄色不良视频 | 伊人网伊人 | 色视频www在线播放国产人成 |