進(jìn)程
1:運(yùn)行時(shí)的(runtime)應(yīng)用程序行剂。
2:進(jìn)程之間的內(nèi)存不共享。
3:進(jìn)程間的通信使用socket(套接字)暑始。
多線程
1:進(jìn)程內(nèi)并發(fā)執(zhí)行的代碼段
2:線程之間共享內(nèi)存
3:創(chuàng)建靈活響應(yīng)的桌面程序
4:每一個(gè)運(yùn)行著的線程對(duì)應(yīng)一個(gè)stack
5:應(yīng)用程序至少的有一個(gè)線程(主線程)
創(chuàng)建線程的方式
創(chuàng)建類繼承Thread類
1:子類覆蓋父類中的run方法凭迹,將線程運(yùn)行的代碼存放到run方法中摊聋。
2:建立子類對(duì)象的同時(shí)線程也被創(chuàng)建。
3:通過(guò)調(diào)用start方法開(kāi)啟線程璧瞬。
class ThreadDemo{
public static void main(String[] args){
IThread t = IThread();
t.start();
}
}
class IThread extends Thread{
public void run(){
System.out.println("thread");
}
}
Thread的常見(jiàn)方法:
1:Thread.yield()
讓當(dāng)前的線程讓出CPU的搶占權(quán)户辫。
2:Thread,sleep()
讓當(dāng)前線程休息指定的毫秒數(shù)。
3:Thread.join()
當(dāng)前的線程等待指定的線程結(jié)束以后才能繼續(xù)執(zhí)行嗤锉。
Thread t = xxx;
t.join();
此時(shí)t執(zhí)行完后其他線程才能繼續(xù)執(zhí)行渔欢。
4:daemon
守護(hù)線程,為其他線程提供服務(wù)的線程瘟忱。如果進(jìn)程中剩余的線程都是守護(hù)線程的話奥额,則進(jìn)程就終止了。
Tread.setDaemon(true);
線程間的通信访诱,資源共享的問(wèn)題垫挨。
- 導(dǎo)致線程不安全的原因:多個(gè)線程訪問(wèn)出現(xiàn)延遲,線程的隨機(jī)性触菜。注意:線程安全問(wèn)題在理想的狀態(tài)下是不容易出現(xiàn)的九榔,但是一旦出現(xiàn)對(duì)軟件的影響是非常大的。
鎖:synchronized
鎖:阻止并發(fā)訪問(wèn)涡相,該為串行的形式訪問(wèn)哲泊。
設(shè)置鎖的時(shí)候一定要有唯一的一個(gè)參照物,鎖旗標(biāo),鎖旗標(biāo)可以是任何對(duì)象
public static object = new Object();
synchronized(object){
}
同步代碼塊的形式
synchronized{
}
同步代碼塊執(zhí)行期間漾峡,線程始終持有對(duì)象的監(jiān)控權(quán)攻旦,此時(shí)其他的線程處于阻塞狀態(tài)。
1:同步方法以當(dāng)前所在的對(duì)象做鎖旗標(biāo)
synchronized(this)
2:同步靜態(tài)方法生逸,使用類作為同步的鎖旗標(biāo)
public static synchronized xxxx(xxxx){
}
3:wait
讓當(dāng)前線程進(jìn)入鎖旗標(biāo)的等待隊(duì)列牢屋,釋放CPU搶占去權(quán)且预,還釋放鎖旗標(biāo)的監(jiān)控權(quán),wait一般在synchronized中使用
4.烙无。:解決死鎖的問(wèn)題
notifyAll()通知所有的線程可槍占CPU的鎖旗標(biāo)的監(jiān)控權(quán)
wait(1000),給wait指定毫秒數(shù)锋谐,讓當(dāng)前隊(duì)列等待一段時(shí)間后就不再等待了
Thread實(shí)現(xiàn)了Runnable接口,如果類已經(jīng)被創(chuàng)建并且繼承了其他的類截酷,那么可以用接口的形式創(chuàng)建線程:
new Thread(Runnable r).start();
同步函數(shù)
在函數(shù)上加上synchronized修飾符即可
線程的狀態(tài)補(bǔ)充
- NEW
至今尚未啟動(dòng)的線程處于這種狀態(tài)涮拗。 - RUNNABLE
正在 Java 虛擬機(jī)中執(zhí)行的線程處于這種狀態(tài)。 - BLOCKED
受阻塞并等待某個(gè)監(jiān)視器鎖的線程處于這種狀態(tài)迂苛。 - WAITING
無(wú)限期地等待另一個(gè)線程來(lái)執(zhí)行某一特定操作的線程處于這種狀態(tài)三热。 - TIMED_WAITING
等待另一個(gè)線程來(lái)執(zhí)行取決于指定等待時(shí)間的操作的線程處于這種狀態(tài)。 - TERMINATED
已退出的線程處于這種狀態(tài)三幻。 - SLEEP
休眠
在給定時(shí)間點(diǎn)上就漾,一個(gè)線程只能處于一種狀態(tài)。這些狀態(tài)是虛擬機(jī)狀態(tài)念搬,它們并沒(méi)有反映所有操作系統(tǒng)線程狀態(tài)抑堡。