線程的狀態(tài)
新建????可運(yùn)行? ? 運(yùn)行? ? 阻塞? ? 終止
創(chuàng)建線程的兩種方式
1.通過(guò)繼承Thread類(lèi)重寫(xiě)run方法來(lái)創(chuàng)建線程
例如 A extends Thread{ 重寫(xiě)run方法 }
new A.start();
2.通過(guò)實(shí)現(xiàn)Runnable接口嘲更,重寫(xiě)run方法來(lái)創(chuàng)建線程
例如A implement Runnable{ 重寫(xiě)run方法 }
new Thread(new A()).start();
實(shí)際開(kāi)發(fā)中鲫忍,實(shí)現(xiàn)Runnable接口的方式更常用浑侥,因?yàn)閖ava是不允許多繼承的,如果當(dāng)前程序已經(jīng)繼承了一個(gè)類(lèi)辖试,就不能用extends Thread 類(lèi)的方式來(lái)創(chuàng)建多線程了。
另外,通過(guò)實(shí)現(xiàn)Runnable接口的方式創(chuàng)建線程迈着,對(duì)數(shù)據(jù)共享也是有好處的睹逃。
Runnable接口出現(xiàn)盗扇,降低了線程對(duì)象和線程任務(wù)的耦合性。
簡(jiǎn)單的方法
sleep() 和 join()
sleep()方法用來(lái)放棄cpu的使用權(quán)沉填,使線程進(jìn)入休眠狀態(tài)疗隶,參數(shù)為毫秒
join()方法則是用來(lái)?yè)屨糲pu的使用權(quán)。
線程優(yōu)先級(jí)
java優(yōu)先級(jí)有10個(gè)等級(jí) 用數(shù)字1-10表示翼闹,10為最高
獲取優(yōu)先級(jí)方法 public int getPriority()??
設(shè)置線程優(yōu)先級(jí)方法 public void setPriority(int newPriority)
獲取當(dāng)前線程Thread.currentThread()
獲取主線程優(yōu)先級(jí)斑鼻,在主線程中調(diào)用Thread.currentThread().getPriority();
設(shè)置優(yōu)先級(jí)也可以使用靜態(tài)常量 Thread.MAX_PRIORITY????Thread.MIN_PRIORITY????Thread.NORM_PRIORITY
分別代表 10 1 5
同步
防止線程后置引發(fā)的一系列問(wèn)題,關(guān)鍵字synchronized
使用方法1.成員方法中添加 public synchronized void play(){}
使用方法2.靜態(tài)方法中添加 public static synchronized void play(){}
使用方法3.語(yǔ)句塊中添加 synchronized(obj){}? obj為操作的對(duì)象
線程間通信問(wèn)題
當(dāng)多個(gè)線程synchronized方法中使用wait()進(jìn)行等待另一個(gè)方法進(jìn)行時(shí)猎荠,可能會(huì)出現(xiàn)所有線程都進(jìn)入等待狀態(tài)坚弱,這種狀態(tài)叫做線程死鎖蜀备,此時(shí)需要喚醒線程,使用notify()或者notifyAll() 荒叶,前者為隨機(jī)喚醒一個(gè)碾阁,后者為喚醒全部。所以一般使用notifyAll()些楣;