国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

長(zhǎng)沙旅游景點(diǎn)廊坊首頁(yè)霸屏優(yōu)化

長(zhǎng)沙旅游景點(diǎn),廊坊首頁(yè)霸屏優(yōu)化,響應(yīng)式網(wǎng)站設(shè)計(jì)圖怎么做,網(wǎng)頁(yè)設(shè)計(jì)公司有什么部門文章目錄 一、概念1、進(jìn)程2、線程3、CPU與線程的關(guān)系4、并行、并發(fā)5、線程的生命周期 二、創(chuàng)建1、繼承Thread2、實(shí)現(xiàn)Runnable接口3、實(shí)現(xiàn)Callable接口 三、API1、獲取運(yùn)行使用的線程2、唯一標(biāo)識(shí)3、線程名4、優(yōu)先級(jí)5、是否處于活動(dòng)狀態(tài)6、守護(hù)線程7、join1、API2、有無(wú)join對(duì)比 …

文章目錄

  • 一、概念
    • 1、進(jìn)程
    • 2、線程
    • 3、CPU與線程的關(guān)系
    • 4、并行、并發(fā)
    • 5、線程的生命周期
  • 二、創(chuàng)建
    • 1、繼承Thread
    • 2、實(shí)現(xiàn)Runnable接口
    • 3、實(shí)現(xiàn)Callable接口
  • 三、API
    • 1、獲取運(yùn)行使用的線程
    • 2、唯一標(biāo)識(shí)
    • 3、線程名
    • 4、優(yōu)先級(jí)
    • 5、是否處于活動(dòng)狀態(tài)
    • 6、守護(hù)線程
    • 7、join
      • 1、API
      • 2、有無(wú)join對(duì)比
    • 8、yield
    • 9、sleep
    • 10、線程中斷


一、概念

1、進(jìn)程

  • 進(jìn)程就是正在運(yùn)行中的程序

2、線程

  • 是1個(gè)進(jìn)程(程序內(nèi)部)的1條執(zhí)行路徑
  • 單線程:1個(gè)進(jìn)程中只有1個(gè)線程(1條執(zhí)行路徑)
  • 多線程:1個(gè)進(jìn)程中包含多個(gè)線程(多條執(zhí)行路徑)
  • 線程之間堆內(nèi)存、方法區(qū)內(nèi)存共享;但是棧內(nèi)存獨(dú)立,1個(gè)線程一個(gè)棧

3、CPU與線程的關(guān)系

  1. 單核CPU:不能夠做到真正的多線程并發(fā),因?yàn)樵谝粋€(gè)時(shí)間單元內(nèi),只能執(zhí)行一個(gè)線程的任務(wù),多個(gè)線程誰(shuí)獲取時(shí)間片運(yùn)行誰(shuí),每個(gè)線程獲取時(shí)間片的概率相等,可能:t1、t2、t2、t2;給人一種多線程并發(fā)的感覺(jué):其實(shí)是由于CPU的處理速度極快,多個(gè)線程之間頻繁切換執(zhí)行,跟人來(lái)的感覺(jué)是多個(gè)事情同時(shí)在做

4、并行、并發(fā)

  1. 并行:多核CPU同時(shí)執(zhí)行多個(gè)任務(wù)。比如:多個(gè)人同時(shí)做不同的事
  2. 并發(fā):單核CPU同時(shí)執(zhí)行多個(gè)任務(wù)。比如:多個(gè)人做同一件事

5、線程的生命周期

  1. 新建狀態(tài)
    • 新建了線程對(duì)象,還沒(méi)調(diào)用start方法
  2. 就緒狀態(tài)
    • 線程調(diào)用了start方法等待獲取CPU時(shí)間片
    • 表示當(dāng)前線程具有搶奪CPU時(shí)間片的權(quán)力
  3. 運(yùn)行狀態(tài)
    • 線程對(duì)象開(kāi)始執(zhí)行run方法
    • run方法的開(kāi)始執(zhí)行標(biāo)志著這個(gè)線程進(jìn)入運(yùn)行狀態(tài),當(dāng)之前占有的CPU時(shí)間片用完之后,會(huì)重新回到就緒狀態(tài)繼續(xù)搶奪CPU時(shí)間片,當(dāng)再次搶到CPU時(shí)間之后,會(huì)重新進(jìn)入run方法接著上一次的代碼繼續(xù)往下執(zhí)行
  4. 阻塞狀態(tài)
    • 當(dāng)一個(gè)線程遇到阻塞事件,例如:sleep方法、獲取synchronized排他鎖失敗(因?yàn)殒i被其它線程所占用)等,此時(shí)線程會(huì)進(jìn)入阻塞狀態(tài),阻塞狀態(tài)的線程會(huì)放棄之前占有的CPU時(shí)間片,之前的時(shí)間片沒(méi)了需要再次回到就緒狀態(tài)搶奪CPU時(shí)間片
  5. 死亡狀態(tài)
    • run方法執(zhí)行完畢或者因異常退出了run方法,該線程生命周期結(jié)束

二、創(chuàng)建

1、繼承Thread

  • class Thread implements Runnable
  • 缺點(diǎn):
    • 由于java是單繼承的,這導(dǎo)致繼承了Thread后就不能在繼承其它類了;在實(shí)際開(kāi)發(fā)中會(huì)經(jīng)常繼承某個(gè)超類來(lái)復(fù)用其中的方法,這導(dǎo)致兩者不能同時(shí)繼承
    • 繼承線程后重寫run方法來(lái)定義任務(wù),這又導(dǎo)致我們將任務(wù)直接定義在線程上使得線程只能做該任務(wù),無(wú)法并發(fā)執(zhí)行其他任務(wù),重用性變差
public class HandleMsg extends Thread{/** 線程標(biāo)識(shí) */private String threadKey;/** 構(gòu)造方法用來(lái)區(qū)分不同線程便于測(cè)試 */public HandleMsg(String threadKey){this.threadKey=threadKey;}@Overridepublic void run(){for(int i=0;i<10;i++){System.err.println(threadKey+":run");}}}//匿名內(nèi)部類lambda
Thread t1=new Thread(()->{for(int i=0;i<10;i++) {System.err.println("t1:run");}
};//創(chuàng)建2個(gè)線程對(duì)象
HandleMsg h1=new HandleMsg("h1");
HandleMsg h2=new HandleMsg("h2");//啟動(dòng)線程,開(kāi)始執(zhí)行實(shí)現(xiàn)的run方法
h1.start();
h2.start();

2、實(shí)現(xiàn)Runnable接口

  • 優(yōu)點(diǎn):線程和線程執(zhí)行的任務(wù)分離
public class HandleMsg implements Runnable{/** 線程標(biāo)識(shí) */private String threadKey;/** 構(gòu)造方法用來(lái)區(qū)分不同線程便于測(cè)試 */public HandleMsg(String threadKey){this.threadKey=threadKey;}@Overridepublic void run(){for(int i=0;i<10;i++){System.err.println(threadKey+":run");}}}//創(chuàng)建2個(gè)任務(wù)對(duì)象
HandleMsg h1=new HandleMsg("h1");
HandleMsg h2=new HandleMsg("h2");//將任務(wù)1交給線程1
Thread t1=new Thread(h1);
//將任務(wù)2交給線程2
Thread t2=new Thread(h2);//啟動(dòng)線程,開(kāi)始執(zhí)行任務(wù)的run方法
t1.start();
t2.start();

3、實(shí)現(xiàn)Callable接口

  • FutureTask implements RunnableFutureRunnableFuture<V> extends Runnable
  • 優(yōu)點(diǎn)
    • 線程和線程執(zhí)行的任務(wù)分離
    • 有返回值
    • 可以聲明拋出的異常
//Callable的泛型就是重寫的call方法的返回值類型
public class HandleMsg implements Callable<String>{/** 線程標(biāo)識(shí) */private String threadKey;/** 構(gòu)造方法用來(lái)區(qū)分不同線程便于測(cè)試 */public HandleMsg(String threadKey){this.threadKey=threadKey;}@Overridepublic String call() throws Exception{for(int i=0;i<10;i++){System.err.println(threadKey+":run");}return threadKey;}}//創(chuàng)建2個(gè)任務(wù)對(duì)象
HandleMsg h1=new HandleMsg("h1");
HandleMsg h2=new HandleMsg("h2");//創(chuàng)建FutureTask類包裝任務(wù)對(duì)象,泛型就是任務(wù)類實(shí)現(xiàn)Callable的泛型,也就是call方法返回值的類型
FutureTask<String> f1=new FutureTask<>(h1);
FutureTask<String> f2=new FutureTask<>(h2);//將FutureTask對(duì)象交給線程
Thread t1=new Thread(f1);
Thread t2=new Thread(f2);//啟動(dòng)線程,開(kāi)始執(zhí)行任務(wù)的run方法
t1.start();
t2.start();//獲取返回值
String result1=f1.get();
String result2=f2.get();

三、API

1、獲取運(yùn)行使用的線程

//在哪個(gè)方法執(zhí)行就獲取執(zhí)行該方法的線程
Thread thread=Thread.currentThread();

2、唯一標(biāo)識(shí)

long getId();

3、線程名

String getName();//線程啟動(dòng)之前可以設(shè)置線程名
void setName(String name);

4、優(yōu)先級(jí)

  • 線程有10個(gè)優(yōu)先級(jí),用1-10表示,默認(rèn)為5
int getPriority();//啟動(dòng)之前設(shè)置
//線程無(wú)法主動(dòng)獲取cpu時(shí)間片,唯一可以干涉線程調(diào)度工作的方式就是修改線程的優(yōu)先級(jí),最大程度的改善獲取cpu時(shí)間片的幾率,理論上,線程優(yōu)先級(jí)越高的線程獲取cpu時(shí)間片的次數(shù)越多
void setPriority(int newPriority);

5、是否處于活動(dòng)狀態(tài)

boolean isAlive();

6、守護(hù)線程

  • 守護(hù)線程又稱為后臺(tái)線程,默認(rèn)創(chuàng)建出來(lái)的線程都是普通線程或稱為前臺(tái)線程
  • 當(dāng)進(jìn)程結(jié)束時(shí),所有正在運(yùn)行的守護(hù)線程都會(huì)被強(qiáng)制中斷
  • 進(jìn)程的結(jié)束:當(dāng)一個(gè)進(jìn)程中沒(méi)有任何前臺(tái)線程時(shí)即結(jié)束
  • main主線程就是前臺(tái)線程,不受其他線程影響,分配其他線程后接著干自己的事,其他線程執(zhí)行的時(shí)候,main線程可能已經(jīng)結(jié)束了
//是否為守護(hù)線程
boolean isDaemon();//啟動(dòng)之前設(shè)置
void setDaemon(boolean on);

7、join

  • 作用是:讓當(dāng)前執(zhí)行的線程陷入等待(內(nèi)部調(diào)用了wait方法)。
    • 永久等待:其實(shí)現(xiàn)原理是不停的檢查當(dāng)前線程是否存活,該線程的任務(wù)執(zhí)行完畢后就會(huì)處于死亡狀態(tài),如果存活則說(shuō)明任務(wù)還未執(zhí)行完畢-繼續(xù)等待
  • 線程啟動(dòng)之后調(diào)用

1、API

//等待線程執(zhí)行完任務(wù)后再往下執(zhí)行,join(0);
void join();//等待線程執(zhí)行一段時(shí)間后再往下執(zhí)行,無(wú)論線程任務(wù)是否執(zhí)行完畢,單位:毫秒
void join(long millis);

2、有無(wú)join對(duì)比

//1、程序正常運(yùn)行順序是不會(huì)等待線程任務(wù)執(zhí)行完畢,就會(huì)往下執(zhí)行
Thread t1=new Thread(()->{for(int i=0;i<5;i++){System.err.println(i);}
});
t1.start();System.err.println("next task");// 輸出結(jié)果
//		next task
//		0
//		1
//		2
//		3
//		4//2、調(diào)用join
Thread t1=new Thread(()->{for(int i=0;i<5;i++){System.err.println(i);}
});
t1.start();t1.join();System.err.println("next task");//		0
//		1
//		2
//		3
//		4
//		next task

8、yield

  • 線程讓步
  • 暫停(不是終止)當(dāng)前正在執(zhí)行的線程任務(wù),讓其它具有相同優(yōu)先級(jí)或更高優(yōu)先級(jí)的等待的線程執(zhí)行任務(wù)(其它也會(huì)包含暫停的線程,所以有可能剛暫停就執(zhí)行)
  • 暫停的線程狀態(tài)變化:運(yùn)行狀態(tài) -> 就緒狀態(tài)
  • 暫停期間不會(huì)釋放鎖,所以其他線程獲取不到鎖

9、sleep

  • 使線程睡眠
  • sleep的睡眠期間不會(huì)釋放鎖,所以其它線程獲取不到鎖
  • 睡眠線程的狀態(tài)變化:運(yùn)行狀態(tài) -> 阻塞狀態(tài) -> 就緒狀態(tài)
//Thread的靜態(tài)方法,單位:毫秒
static void sleep(long millis) throws InterruptedException;
  • sleep和wait的區(qū)別
sleepwait
屬于Thread類屬于Object類
可以在任何地方使用wait、notify、notifyAll 只能在同步方法、同步控制塊里面使用
睡眠期間不會(huì)釋放鎖會(huì)釋放鎖,而且會(huì)將當(dāng)前線程加入到等待隊(duì)列中
不需要喚醒可以被notify、notifyAll喚醒

10、線程中斷

  • 只是打斷線程的睡眠,不會(huì)終止線程的繼續(xù)執(zhí)行
//線程是否中斷
boolean isInterrupted();//中斷線程睡眠
Thread t1=new Thread(()->{System.err.println("run......");try{//睡眠10sThread.sleep(10000L);}catch(InterruptedException e){e.printStackTrace();}System.err.println("end......");
});//啟動(dòng)線程
t1.start();//中斷睡眠
//線程不會(huì)睡眠10s,而是被中斷,拋出InterruptedException,捕獲該異常后,繼續(xù)執(zhí)行后續(xù)的代碼
t1.interrupt();System.err.println("next task");// 執(zhí)行結(jié)果
//		next task
//		run......
//		end......
http://m.aloenet.com.cn/news/40849.html

相關(guān)文章:

  • 中國(guó)機(jī)械加工網(wǎng)加熱爐節(jié)能常用的seo網(wǎng)站優(yōu)化排名
  • 響應(yīng)式網(wǎng)站建站seo初學(xué)教程
  • 煙臺(tái)微信網(wǎng)站建設(shè)網(wǎng)站搜索優(yōu)化
  • 懷化市建設(shè)局門戶網(wǎng)站網(wǎng)絡(luò)營(yíng)銷推廣平臺(tái)
  • 定制型網(wǎng)站開(kāi)發(fā)2345網(wǎng)址導(dǎo)航智能主板
  • 商丘哪里做網(wǎng)站百度收錄提交入口網(wǎng)址
  • dede網(wǎng)站打開(kāi)速度慢如何優(yōu)化seo關(guān)鍵詞
  • 百度如何搜索到自己的網(wǎng)站網(wǎng)站綜合查詢工具
  • 鄭州電商網(wǎng)站開(kāi)發(fā)港港網(wǎng)app下載最新版
  • angular2是做網(wǎng)站的還是手機(jī)的seo排名的公司
  • app運(yùn)營(yíng)流程上海外貿(mào)seo公司
  • 樂(lè)清網(wǎng)站建設(shè)網(wǎng)站建設(shè)網(wǎng)站的宣傳與推廣
  • 旅游景區(qū)網(wǎng)站源碼個(gè)人網(wǎng)站設(shè)計(jì)成品
  • 建c2c網(wǎng)站費(fèi)用拉新推廣賺錢的app
  • 浙江網(wǎng)站建設(shè)企業(yè)軟文類型
  • 免費(fèi)做的網(wǎng)站怎么設(shè)置域名京津冀協(xié)同發(fā)展
  • 營(yíng)銷加盟網(wǎng)站建設(shè)網(wǎng)站維護(hù)是什么意思
  • erp定制開(kāi)發(fā)價(jià)格澳門seo關(guān)鍵詞排名
  • 做網(wǎng)站阿里云買哪個(gè)服務(wù)器好點(diǎn)汽車推廣軟文
  • 長(zhǎng)沙制作網(wǎng)頁(yè)網(wǎng)站杭州網(wǎng)絡(luò)
  • 一品威客網(wǎng)怎么樣seo免費(fèi)優(yōu)化網(wǎng)站
  • win7iis配置網(wǎng)站百度搜索引擎網(wǎng)址
  • 整站優(yōu)化網(wǎng)站報(bào)價(jià)公司網(wǎng)站建設(shè)全包
  • 網(wǎng)站開(kāi)發(fā)團(tuán)隊(duì)取什么名字好怎么引流怎么推廣自己的產(chǎn)品
  • 長(zhǎng)春怎么做網(wǎng)站建站流程新手搭建網(wǎng)站第一步
  • 商城網(wǎng)站開(kāi)發(fā)教程視頻北京網(wǎng)絡(luò)營(yíng)銷推廣
  • 歐美設(shè)計(jì)網(wǎng)站推薦app拉新平臺(tái)哪個(gè)好傭金高
  • 密云做網(wǎng)站的產(chǎn)品關(guān)鍵詞大全
  • 建站行業(yè)的利潤(rùn)百度指數(shù)里的資訊指數(shù)是什么
  • 不銹鋼公司網(wǎng)站源碼 網(wǎng)站建設(shè) 產(chǎn)品3級(jí)分類asp源碼域名查詢注冊(cè)商