一、簡單粗暴的線程
最原始的方式,當(dāng)我們要并行的或者異步的執(zhí)行一個(gè)任務(wù)的時(shí)候,我們會(huì)直接使用啟動(dòng)一個(gè)線程的方式,如下面所示:
new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub 這里放你要執(zhí)行的方法 } }).start();
但是像上面或者類似這種每次來都是用new 一個(gè)Thread出來的方式存在著很多的弊端,如下面:
- 每次new Thread新建對(duì)象性能差;
- 線程缺乏統(tǒng)一的管理,可以無限制新建線程,相互之間競爭,還可能占用過多系統(tǒng)資源導(dǎo)致死機(jī)或者OOM(Out of Memory);
- 缺乏更多的功能,如定時(shí)執(zhí)行、定期執(zhí)行、線程中斷等。
二、線程池
為了解決這些問題,Jdk1.5之后加入了java.util.concurrent包,這個(gè)包中主要介紹java中線程以及線程池的使用。為我們?cè)陂_發(fā)中處理線程的問題提供了非常大的幫助。