Java線程
多進(jìn)程:在操作系統(tǒng)中能運(yùn)行多個(gè)任務(wù)。多線程:在同一個(gè)應(yīng)用程序中有多個(gè)順序流執(zhí)行。
兩者區(qū)別:進(jìn)程擁有自己完整的變量,線程則共享相同的數(shù)據(jù)。
JVM有一個(gè)主線程,啟動(dòng)Java程序則啟動(dòng)他,并調(diào)用程序的main()方法,多線程是通過虛擬CPU實(shí)現(xiàn),通過java.lang.Thread類實(shí)現(xiàn),繼承Thread類。
構(gòu)造方法:
Thread()
Thread(Runable target)
Thread(Runable target,String name)
啟動(dòng)線程用run()方法,自動(dòng)調(diào)用。
start()進(jìn)入可運(yùn)行狀態(tài),通過“.”來調(diào)用。
1.實(shí)現(xiàn)Runable接口定義唯一的run()方法。
Class rt = new Class();
Thread t = new Thread(rt);
t.start();
2.繼承Thread類。
Thread t = new Thread();
t.start();
兩者的區(qū)別:
1.Runable 可以從其他類繼承,保持程序風(fēng)格一致性。
2.Thread 不能再?gòu)钠渌惱^承。
結(jié)束線程:
1.run()方法執(zhí)行完畢。
2.拋出一個(gè)異常或錯(cuò)誤。
3.調(diào)用一個(gè)Deprecated的stop()方法。(過時(shí))
后臺(tái)線程為其他線程提供服務(wù),優(yōu)先級(jí)最低,級(jí)別0-10,默認(rèn)級(jí)別為5。
如:Thread dt = new Thread();
??????? dt.setDaemon(true);??? //設(shè)置成后臺(tái)線程
??????? dt.start();
線程控制:
測(cè)試線程是否處于Runable狀態(tài)???isAlive()方法。
中斷線程
?Thread.sleep()中斷時(shí)間以毫秒為單位。
?Thread.yield()放棄執(zhí)行,執(zhí)行不低于此線程的其他線程。
設(shè)置線程的優(yōu)先級(jí)
getPriority() 獲取
setPriority() 設(shè)置
對(duì)象方法
wait()處于等待狀態(tài),等待被喚醒。
notify()/notifyAll() 喚醒線程/所有線程。
join()調(diào)用這個(gè)方法主線程,等待加入子線程完成。
異常為 InterruptedException e 。
Thread.currentThread().isAlive();?? // 獲取當(dāng)前線程是否處于Runable狀態(tài)
Thread.currentThread().getName();? //獲取當(dāng)前線程的名字
互斥鎖:保證共享數(shù)據(jù)的完整性。每個(gè)對(duì)象對(duì)應(yīng)一個(gè)標(biāo)記,保證在任一時(shí)刻,只能有一個(gè)線程訪問該對(duì)象,使用synchronized關(guān)鍵字修飾。放在方法、對(duì)象、塊前。
釋放鎖用break,return或拋出exception自動(dòng)釋放;調(diào)用wait()方法將放棄擁有的對(duì)象鎖。
如:public void method() {
???????????????synchronized(obj) {
???????????????}
?????????}
?????????等同于
?????????public synchronized void method() {
?????????}
死鎖:兩個(gè)線程都在等待對(duì)象鎖,不可避免。
posted on 2007-11-01 11:35 Rabbit 閱讀(227) 評(píng)論(0) 編輯 收藏