進(jìn)程是程序(任務(wù))的執(zhí)行過(guò)程(具有動(dòng)態(tài)性,必須在動(dòng)態(tài)執(zhí)行時(shí)才能被稱(chēng)為進(jìn)程,對(duì)于靜態(tài)存儲(chǔ)的程序不能說(shuō)是進(jìn)程);
進(jìn)程特點(diǎn):持有資源(共享內(nèi)存,共享文件)和線程;故而進(jìn)程是資源和線程的載體
線程是系統(tǒng)中最小的執(zhí)行單元,同一進(jìn)程中有多個(gè)線程,線程共享進(jìn)程的資源;
要點(diǎn):
1、Java對(duì)線程的支持
thread類(lèi),rannable接口
2、線程的創(chuàng)建和啟動(dòng)
3、線程常用的方法
4、如何正確停止線程
如何正確地停止Java中的線程
已經(jīng)不再使用stop()方法來(lái)停止線程;因?yàn)樵摲椒〞?huì)導(dǎo)致線程戛然而止,不知道線程完成了什么,不知道那些工作還沒(méi)有做,無(wú)法進(jìn)行一些清理工作;
應(yīng)該使用退出標(biāo)志,當(dāng)線程退出標(biāo)志顯示線程要退出時(shí),會(huì)為程序執(zhí)行后續(xù)的應(yīng)該完成的操作,使得一個(gè)完成的業(yè)務(wù)步驟能夠完整地執(zhí)行完畢;在執(zhí)行完整的業(yè)務(wù)步驟之后可以有足夠的時(shí)間進(jìn)行代碼清理工作;從而保證了代碼的安全性;
其中,interrupt方法不能用來(lái)停止線程,該方法的初衷?xún)H僅是中斷程序,而不是停止程序;
~~線程之間的爭(zhēng)用
~~線程的交互——互斥與同步
<1>線程互斥:在同一時(shí)間只能有一條線程對(duì)關(guān)鍵數(shù)據(jù)或者臨界區(qū)進(jìn)行操作;
<2>線程同步:線程之間的一種通信機(jī)制;某一個(gè)線程做了一件事,它會(huì)以某種形式告知其他的線程它已做完這件事;
互斥的實(shí)現(xiàn):增加一個(gè)鎖對(duì)象;synchronized(intrinsic lock)關(guān)鍵字或者代碼塊;
同步的實(shí)現(xiàn):wait()/notify()/notifyAll(),這三個(gè)方法均為object對(duì)象的成員函數(shù),而不是線程thread對(duì)象的函數(shù);調(diào)用wait()方法的線程和調(diào)用notifyAll()方法的線程不是同一個(gè)線程的同一次操作中執(zhí)行的,是兩個(gè)不同的線程,分別調(diào)用;
如何理解同步:WaitSet(可理解為線程休息室)
總結(jié):