wait()方法作用:
呼叫wait()方法後,當前執行緒休眠,且釋放其占有的物件鎖。
notify()方法作用:
呼叫notify()方法後,喚醒乙個正在等待當前物件鎖的執行緒,賦予其物件鎖。
notify all()方法作用:
呼叫notify()方法後,喚醒所有正在等待當前物件鎖的執行緒。
以上三個方法均為object類的方法,可以用於多執行緒。並且在呼叫這3個方法的時候,當前執行緒必須獲得這個物件(object)的鎖。
多個執行緒都持有同乙個物件的時候,如果都要進入synchronized(obj)的內部,就必須拿到這個物件的鎖。
synchronized的機制保證了同一時間最多只能有1個執行緒拿到了物件的鎖。
以下為乙個小栗子
建立三個執行緒,a執行緒列印10次a,b執行緒列印10次b,c執行緒列印10次c,要求執行緒同時執行,交替列印10次abc。
public class mythreadprinter implements runnable
@override
public void run()
try catch (interruptedexception e)
}
}
}
public static void main(string args) throws exception
}
其中,每個執行緒都有prev、self兩個鎖。以a開始,a必須獲得prev(=c)和self(=a),才能列印;當列印完a後,喚醒乙個正在等待鎖self(=a)的執行緒,這裡,b在等待鎖a,所以b被喚醒,b現在獲得鎖prev=a和self=b,所以列印b;當列印完b後,喚醒乙個正在等待鎖self(=b)的執行緒,這裡,c在等待b,所以c被喚醒,c獲得了鎖,被列印。
如此下去即可按順序交替列印abc。
JAVA多執行緒之 執行緒池
執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...
Java多執行緒之執行緒安全
當多個執行緒訪問某乙個類 物件或方法時 這個類始終都能表現出正確的行為,那麼這個類 物件或方法 就是執行緒安全的。public class mythread extends thread public static void main string args 結果如下 t1正在執行 4 t1正在執行...
java 多執行緒 之 Excutor
excutor介面 提供了一種將任務提交和任務執行機制相分離的方法 excutorservice介面 提供了excutor的管理介面,以及可為跟蹤乙個或多個非同步任務狀態而生成future的方法 scheduledexcutorservice介面 提供了可以安排在給定的延遲後執行或定時執行的命令 方...