線程的調(diào)用必須使用Thread類中的start方法,實(shí)現(xiàn)Runnable接口
void{
Runner1 r = new Runner1();//一個(gè)線程對(duì)象
//Thread t = new Thread(r); //切成一個(gè)子線程;
//方法1存在,方法2不存在;這個(gè)為Runnable接口的子方法
t.start();}
class Runner1 implements Runnable{} //方法1;實(shí)現(xiàn)接口
class Runner1 extends Thread;(直接調(diào)用r.start)//方法2;繼承
isAlive()判斷現(xiàn)成是否還活著,是否終止
getPriority()獲得線程的優(yōu)先級(jí)數(shù)值
setPriority()設(shè)置線程的優(yōu)先級(jí)..
...等等.
sleep方法throws InterruptedException
while(true){
System.out.println("==="+new Date()+"===");
try{sleep(1000);}catch(InterruptedException e){return;}
注意:重寫的方法不能拋出繼承父類的不同的異常,無法直接throws Exception.
以上的方法太過于簡(jiǎn)單,如果正在運(yùn)用一個(gè)資源時(shí)候直接退出是不好的.
stop方法,更粗暴.直接無響應(yīng)殺死.盡量不使用
while(flag){} boolean flag = true;//來這樣判斷,進(jìn)程.
join方法中t1.join即為先執(zhí)行run中的程序,結(jié)束時(shí)開始執(zhí)行主程序,相當(dāng)于方法調(diào)用
if(i%10==0){yield()};讓出內(nèi)存,讓別人執(zhí)行一會(huì).
ti.setPriority(Thread.NORN_Priority +3);//在正常優(yōu)先級(jí)中+3;
Thread.currentThread().isAlive()//找到這個(gè)線程,判斷線程是否存在
synchronized(this)//鎖住當(dāng)前線程,實(shí)現(xiàn)線程同步的弊端.
死鎖問題,用例如if(a==1),synchronized(o1)我們要順序完成這線程,
我們synchronized(o2)設(shè)置為if(a==0)則執(zhí)行死鎖o2,放到o1線程中.o1放到o2中,完成死鎖.
一個(gè)進(jìn)程被鎖住不進(jìn)行同步的時(shí)候,這個(gè)時(shí)候依舊會(huì)影響到?jīng)]有鎖的同步對(duì)象,需要特別注意
注意wait()與notify()阻塞的使用以及叫醒.需要使用try,catch.
notify是叫醒其他多個(gè)線程進(jìn)行執(zhí)行.而非是對(duì)自己進(jìn)行叫醒.
wait時(shí)別的線程可以訪問鎖定對(duì)象,調(diào)用wait時(shí)必須鎖定該對(duì)象,
而sleep時(shí)別的線程也不可以訪問鎖定對(duì)象.