java Thread 多線程
Thread 創(chuàng)建線程的兩種方法:
1、定義類繼承Thread類,覆寫類中的run方法,調(diào)用類對象的start方法,start方法啟動線程,調(diào)用run方法。Thread類用于描述線程;該類定義一個功能run,用于存儲線程要運行的代碼。
2、定義類實現(xiàn)Runnable接口,覆蓋Runnable接口中的方法,通過Thread類建立線程對象,將Runnable接口的子類對象作為實際參數(shù)傳遞給Thread類的構造函數(shù),調(diào)用Thread類的start方法開啟線程,線程會調(diào)用Runnable接口子類中的run方法;
實現(xiàn)接口Runnable的方式避免了單繼承帶來的局限性;
Thread T;
T.setMaemon(true);//設置線程為后臺線程;當所有前臺線程結束后后臺線程自動結束;
T.notify();//喚醒本線程;
T.notifyAll();//喚醒全部線程;
T.interrupt();//中斷線程;
Thread.sleep(100);//暫停線程100毫秒
synchronized:默認鎖定的是本身,也可以鎖定自定義的對象;
必須要有兩個及以上的線程執(zhí)行,多個線程使用同一個鎖,必須保證同步過程中只能有一個線程在運行;
判斷同步: 明確哪些代碼是需要多線程運行的代碼,明確共享數(shù)據(jù),明確多線程運行代碼中哪些語句是操作共享數(shù)據(jù);
class Tickets implements Runnable
{
private int tick = 100;
public void run() { // public synchronized void run()
while (tick > 0) {
synchronized (this) {
if (tick > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.toString() + "sale:" + tick--);
}
}
}
}
如上:tick就是共享數(shù)據(jù),操作tick就需要在synchronized中進行操作,synchroized鎖定的就是Tickets本身;
等待喚醒機制: 在操作同步線程時,都必須要標識它們所操作線程所持有的鎖,只有同一個鎖上的被等待線程,才可以被同一個鎖上的notify喚醒,不可以對不同鎖中的線程進行了喚醒;(也即:等待和喚醒必須是同一個鎖)
相關文章
SpringBoot默認包掃描機制及@ComponentScan指定掃描路徑詳解
這篇文章主要介紹了SpringBoot默認包掃描機制及@ComponentScan指定掃描路徑詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
深入理解Java SpringCloud Ribbon 負載均衡
Ribbon是一個客戶端負載均衡器,它提供了對HTTP和TCP客戶端的行為的大量控制。這篇文章主要介紹了SpringCloud Ribbon 負載均衡的實現(xiàn),感興趣的小伙伴們可以參考一下2021-09-09
解決使用@ManyToMany查詢數(shù)據(jù)時的死循環(huán)問題
這篇文章主要介紹了解決使用@ManyToMany查詢數(shù)據(jù)時的死循環(huán)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring中@Import的各種用法以及ImportAware接口詳解
這篇文章主要介紹了Spring中@Import的各種用法以及ImportAware接口詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10

