寫法
synchronized(鎖)
執行原理:當執行緒進入同步鎖, 會把鎖拿走, 執行**塊中的**, **執行完畢後, 會把鎖還回去; 如果執行緒遇到同步**塊, 發現沒有鎖, 將進入等待(有鎖才能進去)
注意:保證所有執行緒使用的都是同一把鎖
鎖可以使用任意乙個物件(同乙個物件就行)
下面是運用同步鎖編寫的乙個賣門票例子
public class demo01
}// 利用介面方法 保證訪問的共享資源
class tickets implements runnable catch (interruptedexception e)
// 判斷票
if (tickets > 0) else
}// 讓執行緒讓出cpu的執行資源(可能讓出增加機率)
thread.yield();}}
}
public class demo02
}// 利用介面方法 保證訪問的共享資源
class tickets1 implements runnable
// 讓執行緒讓出cpu的執行資源(可能讓出 增加機率)
thread.yield();}}
// 靜態方法也可以使用鎖,類鎖,成員方法使用的物件鎖是this
public static synchronized boolean selltickets() else
}}
運用lock介面實現
寫法
lock();
try finaly
public class demo03
}// 利用介面方法 來保證 訪問的共享資源
class tickets2 implements runnable else
} finally
// 讓執行緒讓出cpu的執行資源(可能讓出 增加機率)
thread.yield();}}
}
死鎖(盡量避免)
出現前提:
1.至少兩個執行緒
2.鎖的巢狀(同步**塊的巢狀)
3.兩把鎖
public class demo05
}// 宣告鎖
class locka
// 建立鎖物件(宣告個常量)
public static final locka a = new locka();
}class lockb
// 建立鎖物件(宣告個常量)
public static final lockb b = new lockb();
}// 執行緒
class dielockrunnable implements runnable
}} else }}
// 改變一下標記
istrue = !istrue;
}}
}
如何停止執行緒?public class demo06 catch (interruptedexception e)
// 利用標記停止執行緒
runnable.istrue = true;
system.out.println("呼叫執行緒中斷方法---");
// 讓主線程執行一會
try catch (interruptedexception e)
system.out.println("主線程結束");
}}class interruptrunnable implements runnable catch (interruptedexception e)
system.out.println(thread.currentthread().getname() + "run");
}}
}
從子執行緒中修改狀態, 主線程中是否能夠立即接收到?public class demo08
system.out.println("主線程結束");
}}class changerunnable implements runnable catch (interruptedexception e)
if (num == 5)
system.out.println(thread.currentthread().getname() + "--" + num);}}
}
多執行緒的鎖
由於併發的問題,需要加鎖 當多個執行緒同時進行任務時,為了保證不會有多個執行緒同時對同乙個資料進行操作造成不可預料的後果,所以有了鎖的概念,我們通過鎖來使多執行緒任務更加安全。lock threading.lock cond threading.condition lock lock 多執行緒的鎖例...
python多執行緒鎖 python的多執行緒程式設計之鎖
1 背景概述 在python中,要保證資料的正確性,並且自己對資料進行控制,對資料進行加鎖並且自己釋放鎖。多執行緒的主要目的為了提高效能與速度,用在無關的方向是最好的,例如在使用爬蟲的時候,可以使用多執行緒來進行爬取資料,因為在這些執行緒之間沒有需要共同操作的資料,從而在這個時候利用是最好的。如果需...
多執行緒,執行緒鎖,例項
多執行緒可以分多條執行緒,同時執行程式,但也因此出現一些問題,通過執行緒鎖可以解決 包子例項 廚師做包子,顧客吃包子,多餘50個包子廚師停止做包子,包子為零顧客停止吃包子,當廚師做到10個後顧客可以吃包子 顧客類 customer.class public class customer implem...