可以在臨界區(qū)代碼開(kāi)始的位置執(zhí)行Lock類的lock方法,為代碼塊加鎖,而在臨界區(qū)的出口使用相同Lock實(shí)例的unlock方法,釋放臨界區(qū)資源。

創(chuàng)新互聯(lián)服務(wù)緊隨時(shí)代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過(guò)10余年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計(jì)師、專業(yè)的網(wǎng)站實(shí)施團(tuán)隊(duì)以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對(duì)網(wǎng)站進(jìn)行網(wǎng)站設(shè)計(jì)、做網(wǎng)站、建設(shè)、維護(hù)、更新和改版,實(shí)現(xiàn)客戶網(wǎng)站對(duì)外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。
Demo2-12中,主線程先創(chuàng)建了一個(gè)lockTest對(duì)象test,然后將相同的test對(duì)象交給兩個(gè)不同的線程執(zhí)行。子線程1獲取到了lock后,開(kāi)始執(zhí)行before sleep輸出語(yǔ)句,遇到sleep后,線程1阻塞將會(huì)放棄執(zhí)行權(quán),這時(shí)線程2可以獲取執(zhí)行權(quán),當(dāng)線程2執(zhí)行l(wèi)ock方法時(shí),發(fā)現(xiàn)鎖已經(jīng)被別的線程獲取,所以線程2阻塞等待lock的釋放。線程1從sleep中被喚醒后,將繼續(xù)執(zhí)行after sleep語(yǔ)句,之后釋放了鎖,此時(shí)線程2從鎖等待中被喚醒,執(zhí)行臨近區(qū)的內(nèi)容,因此Demo2-12的輸出是先線程1的兩條語(yǔ)句,之后才輸出線程2的兩條語(yǔ)句。而Demo2-13在沒(méi)有鎖的保護(hù)下,程序無(wú)法保證先將線程1的兩條語(yǔ)句輸出后再執(zhí)行線程2的輸出,因此,Demo2-13的輸出結(jié)果是交叉的。
public Object getObject(String key,Object o) {
synchronized (map) {
if(map.get(key)==null) {
map.put(key,o)
}else {
return map.get(key);
}}// 格式?jīng)]法弄,自己弄一下
}
// demol0326 的回答意思使用MyTest的實(shí)例來(lái)加鎖,但是map是static的,無(wú)法鎖住
// MyTest的多個(gè)實(shí)例在多個(gè)線程中的請(qǐng)求
//禾木雙子 :如果A線程在getObject方法的第二行停止,此時(shí)B線程進(jìn)入getObject后執(zhí)行部分代碼, 此時(shí)B線程停止,A線程啟動(dòng),他不會(huì)執(zhí)行'多線程處理', 仍然有線程線程安全問(wèn)題,(想像一下更多的線程進(jìn)入該方法的情況,num甚至?xí)玫截?fù)值)
實(shí)現(xiàn)UI界面嗎?
用一個(gè)VECTOR保存密碼,程序下次運(yùn)行不就又不可以了嗎?
package chen.util.algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;
public class Test2 {
public static void main(String[] args) throws IOException {
VectorString v = new VectorString(1);
v.add(0, "123"); // 設(shè)置出示密碼
// 利用控制臺(tái)來(lái)設(shè)置我們需要打印的值。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 程序要一直執(zhí)行。如果程序重新運(yùn)行就會(huì)把密碼更改為123。建議你吧密碼保存到本地文件或者數(shù)據(jù)庫(kù)。
while(true){
String mima;
mima = br.readLine();
System.out.println("更改密碼請(qǐng)輸入321");
// 用戶更改密碼
if(mima.equals("321")){
String mima1 = br.readLine();
v.add(0, mima1);
}
// 密碼正確后執(zhí)行
if(mima.equals(v.get(0))){
System.out.println("正確");
}
// 初始密碼 123
if(mima.equals(v.get(0))){
System.out.println("用戶使用初始化密碼進(jìn)入系統(tǒng)");
}
}
}
}
public?Singleton?{
private?Singleton?instance;
private?Singleton()?{}?//?構(gòu)造器私有化
public?static?Singleton?getInstance()?{
if?(instance?==?null)?{?//?第一次檢查不加鎖
synchronized(Singleton.class)?{?//?加鎖?
if?(instance?==?null)?{?//?第二次檢查是在加鎖的情況下
instance?=?new?Singleton();
}
}
}
return?instance;
}
}
網(wǎng)頁(yè)題目:java鎖的使用實(shí)例代碼,java中的各種鎖詳細(xì)介紹
當(dāng)前鏈接:http://chinadenli.net/article41/dsgjihd.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站維護(hù)、Google、網(wǎng)頁(yè)設(shè)計(jì)公司、企業(yè)建站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)