1、并發(fā):不同任務(wù)占用不同資源運(yùn)行,比如一個(gè)進(jìn)程需要使用使用IO和CPU,那么使用這兩個(gè)資源的線程可以分別運(yùn)行。
? ? ?并行:線程同時(shí)執(zhí)行,比如CPU有4核,就可以并行運(yùn)行4個(gè)線程,減少上下文切換次數(shù)。
2、多進(jìn)程編程:Java類,ProcessBuilder、RunTime、Linux下創(chuàng)建多進(jìn)程的開銷遠(yuǎn)遠(yuǎn)小于Windows,所以現(xiàn)在的服務(wù)器大多基于Linux。
3、Thread:對(duì)象可繼承Thread來聲明為一個(gè)線程類,類必須繼承public void run() 來實(shí)現(xiàn)該線程要實(shí)現(xiàn)的功能,該類執(zhí)行start()方法來啟動(dòng)一個(gè)線程。

運(yùn)行結(jié)果:


每次運(yùn)行的結(jié)果都不一定一樣,注意main()方法作為第一個(gè)線程,beging thread make總是最先得到執(zhí)行,然后執(zhí)行線程類中的構(gòu)造方發(fā),如果線程類存在父類,則先執(zhí)行父類構(gòu)造方法在執(zhí)行繼承類構(gòu)造方法,在執(zhí)行run()方法。main()方法中for循環(huán)之后的代碼不一定什么時(shí)候執(zhí)行。
代碼第5行有一個(gè)靜態(tài)變量,第6行有一個(gè)普通變量,在構(gòu)造函數(shù)和run()方法中使用tNumber的原因是,在Java內(nèi)存管理中靜態(tài)變量和對(duì)象一樣存儲(chǔ)在堆中,供大家共享,所以即使新建一個(gè)線程(新建一個(gè)ThreadOne類),如果使用靜態(tài)變量threadNumber代替tNumber在函數(shù)中,得到的結(jié)果就全是Thread 4(1).......Thread 4(3)........,使用普通變量,則基本變量和對(duì)象引用存儲(chǔ)在屬于該線程的棧中,獨(dú)立屬于該線程,所以能得到Thread 1() Thread 3()等。
內(nèi)部實(shí)現(xiàn)過程為:線程類調(diào)用start(),然后在調(diào)用run()。
4、Runable:因?yàn)镴ava中extends只能繼承一個(gè)類,所以可以使用Runable接口來定義一個(gè)線程類。