<--
注意:1.使用鎖物件呼叫wait()方法!!!!
2.直接呼叫run()方法不會啟動執行緒,注意其在main中的執行過程.
-->
一.多執行緒
1.建立執行緒
a.定義乙個類繼承thread類, 重寫run()方法, 建立該類物件, 呼叫start()方法.
程式會開啟一條新執行緒, 在新執行緒上自動呼叫run()方法.
b.定義乙個類實現runnable介面, 實現run()方法, 建立thread物件, 建構函式中傳入runnable物件, 呼叫start()方法.
程式會開啟一條新執行緒, 在新執行緒上自動呼叫runnable的run()方法.
2.thread類常用方法
a.currentthread()
獲取當前執行緒物件
b.getname()
獲取執行緒的名字
c.setname(string)
設定執行緒的名字
d.sleep(long)
控制線程休眠指定毫秒
e.setdaemon(boolean)
.
f.join()
當前執行緒暫停, 指定執行緒加入, 等待指定執行緒執行結束, 當前執行緒繼續
3.同步
a.同步**塊
使用synchronized(鎖物件)方式定義同步**塊
多個同步**塊如果使用相同的鎖物件, 那麼同一時間內只能執行乙個
b.同步方法
如果整個方法內的**都需要同步, 那麼可以在方法宣告上加上synchronized
在同乙個物件上的同步方法, 同一時間只能執行乙個
同步方法預設使用this作為鎖物件
如果希望同步方法和同步**塊進行同步, 那麼同步**塊也要自劃定鎖物件為this
c.什麼時候用同步
兩個執行緒在執行兩段**的時候, 其中一段**執行的過程中不希望cpu切換到另一段**.
可以將兩段**放在同步**塊中, 使用相同的鎖物件, 這樣同一時間內只能執行一段**.
d.執行緒安全問題
當多個執行緒併發訪問同一資料, 有可能出現執行緒安全問題.
這時就可以使用同步技術來解決, 將訪問資料的**放在同步**塊中, 這樣做同一時間只能有一條執行緒訪問資料.
e.死鎖
在多執行緒併發執行的時候, 盡量避免多層同步**巢狀使用, 有可能互相衝突, 造成死鎖
4.通訊
a.等待
使用鎖物件的wait()方法進行等待
b.喚醒
使用鎖物件的notify()方法進行喚醒, 該方法是喚醒隨機乙個執行緒
使用notifyall()方法可以喚醒所有等待的執行緒
5.jdk5的同步
使用reentrantlock類建立乙個鎖物件, 在需要同步的**前執行lock()方法, 同步結束的地方unlock()
如:
reentrantlock lock = new reentrantlock();
lock.lock();
lock.unlock();
6.jdk5的通訊
使用reentrantlock可以呼叫newcondition()方法建立condition物件
使用condition物件await()方法可以控制當前執行緒等待
使用condition物件的signal()方法可以喚醒指定的執行緒
如:
condition c1 = lock.newcondition();
condition c2 = lock.newcondition();
c1.await();
c2.signal();
c2.await()
c1.signal();
signalall()
二.timer類
1.建立計時器
timer timer = new timer();
2.安排任務
schedule(timertask task, long delay)
安排乙個任務, 等待delay毫秒後執行
schedule(timertask task, long delay, long period)
安排乙個任務, 等待delay毫秒後執行, 每隔period毫秒再執行
schedule(timertask task, date time)
安排乙個任務, 等待time時間開始執行
schedule(timertask task, date firsttime, long period)
安排乙個任務, 等待firsttime時間開始執行, 每隔period毫秒再執行
如:
timer timer = new timer();
timer.schedule(new timertask()
},3000);
Java基礎 多執行緒
多執行緒的概念,如何在程式中建立多執行緒 thread runnable 執行緒安全問題,執行緒的同步,執行緒之間的通訊 死鎖。一 建立執行緒和啟動執行緒。為什麼要覆蓋run方法 thread類用於描述執行緒。該類就定義了乙個功能。用於儲存執行緒要執行的 該儲存功能就是run方法。也就是說threa...
Java多執行緒基礎
thread.currentthread 與this的區別 thread t1 new thread target 在上述 中,thread.currentthread 指的是t1執行緒,this指的是target執行緒。可重入鎖 setdaemon boolean on 將當前執行緒設定為守護執行...
java初入多執行緒12
自定義執行緒建立 threadfactory 我們原先用的執行緒池threadpoolexecutor 裡面的執行緒都是從threadfactory 建立的。2.作用 我們可以根據自定義執行緒池,幫助我們跟蹤執行緒池建立了多少個執行緒,也可以自定義執行緒的名稱,組以及優先順序等資訊。甚至可以將所有執...