国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

解決方法三:lock鎖機制

trigkit4 / 3436人閱讀

摘要:賣票案例出現(xiàn)了線程安全問題賣出了不存在的票和重復(fù)的票解決線程安全問題的三種方案使用鎖接口實現(xiàn)提供了比使用方法和語句可獲得的更廣泛的鎖定操作。接口中的方法獲取鎖。


package com.itheima.demo09.Lock;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/*

賣票案例出現(xiàn)了線程安全問題
賣出了不存在的票和重復(fù)的票

解決線程安全問題的三種方案:使用Lock鎖
java.util.concurrent.locks.Lock接口
Lock 實現(xiàn)提供了比使用 synchronized 方法和語句可獲得的更廣泛的鎖定操作。
Lock接口中的方法:
    void lock()獲取鎖。
    void unlock()  釋放鎖。
java.util.concurrent.locks.ReentrantLock implements Lock接口


使用步驟:
    1.在成員位置創(chuàng)建一個ReentrantLock對象
    2.在可能會出現(xiàn)安全問題的代碼前調(diào)用Lock接口中的方法lock獲取鎖
    3.在可能會出現(xiàn)安全問題的代碼后調(diào)用Lock接口中的方法unlock釋放鎖

*/
public class RunnableImpl implements Runnable{

//定義一個多個線程共享的票源
private  int ticket = 100;

//1.在成員位置創(chuàng)建一個ReentrantLock對象
Lock l = new ReentrantLock();

//設(shè)置線程任務(wù):賣票
@Override
public void run() {
    //使用死循環(huán),讓賣票操作重復(fù)執(zhí)行
    while(true){
        //2.在可能會出現(xiàn)安全問題的代碼前調(diào)用Lock接口中的方法lock獲取鎖
        l.lock();

        //先判斷票是否存在
        if(ticket>0){
            //提高安全問題出現(xiàn)的概率,讓程序睡眠
            try {
                Thread.sleep(10);
                //票存在,賣票 ticket--
                System.out.println(Thread.currentThread().getName()+"-->正在賣第"+ticket+"張票");
                ticket--;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }finally {
                //3.在可能會出現(xiàn)安全問題的代碼后調(diào)用Lock接口中的方法unlock釋放鎖
                l.unlock();//無論程序是否異常,都會把鎖釋放
            }
        }
    }
}

/*//設(shè)置線程任務(wù):賣票
@Override
public void run() {
    //使用死循環(huán),讓賣票操作重復(fù)執(zhí)行
    while(true){
       //2.在可能會出現(xiàn)安全問題的代碼前調(diào)用Lock接口中的方法lock獲取鎖
       l.lock();

        //先判斷票是否存在
        if(ticket>0){
            //提高安全問題出現(xiàn)的概率,讓程序睡眠
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            //票存在,賣票 ticket--
            System.out.println(Thread.currentThread().getName()+"-->正在賣第"+ticket+"張票");
            ticket--;
        }

        //3.在可能會出現(xiàn)安全問題的代碼后調(diào)用Lock接口中的方法unlock釋放鎖
        l.unlock();
    }
}*/

}
package com.itheima.demo09.Lock;

/*

模擬賣票案例
創(chuàng)建3個線程,同時開啟,對共享的票進行出售

*/
public class Demo01Ticket {

public static void main(String[] args) {
    //創(chuàng)建Runnable接口的實現(xiàn)類對象
    RunnableImpl run = new RunnableImpl();
    //創(chuàng)建Thread類對象,構(gòu)造方法中傳遞Runnable接口的實現(xiàn)類對象
    Thread t0 = new Thread(run);
    Thread t1 = new Thread(run);
    Thread t2 = new Thread(run);
    //調(diào)用start方法開啟多線程
    t0.start();
    t1.start();
    t2.start();
}

}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/75599.html

相關(guān)文章

  • Java多線程學(xué)習(xí)(六)Lock的使用

    摘要:返回與此鎖相關(guān)聯(lián)的給定條件等待的線程數(shù)的估計。查詢是否有線程正在等待獲取此鎖。為公平鎖,為非公平鎖線程運行了獲得鎖定運行結(jié)果公平鎖的運行結(jié)果是有序的。 系列文章傳送門: Java多線程學(xué)習(xí)(一)Java多線程入門 Java多線程學(xué)習(xí)(二)synchronized關(guān)鍵字(1) java多線程學(xué)習(xí)(二)synchronized關(guān)鍵字(2) Java多線程學(xué)習(xí)(三)volatile關(guān)鍵字 ...

    Caicloud 評論0 收藏0
  • Java多線程學(xué)習(xí)(四)等待/通知(wait/notify)機制

    摘要:運行可運行狀態(tài)的線程獲得了時間片,執(zhí)行程序代碼。阻塞的情況分三種一等待阻塞運行的線程執(zhí)行方法,會把該線程放入等待隊列中。死亡線程方法執(zhí)行結(jié)束,或者因異常退出了方法,則該線程結(jié)束生命周期。死亡的線程不可再次復(fù)生。 系列文章傳送門: Java多線程學(xué)習(xí)(一)Java多線程入門 Java多線程學(xué)習(xí)(二)synchronized關(guān)鍵字(1) java多線程學(xué)習(xí)(二)synchronized關(guān)鍵...

    PiscesYE 評論0 收藏0
  • Java機制了解一下

    摘要:底層是是通過對象,對象有自己的對象頭,存儲了很多信息,其中一個信息標(biāo)示是被哪個線程持有。當(dāng)一個線程執(zhí)行的代碼出現(xiàn)異常時,其所持有的鎖會自動釋放。 前言 回顧前面: 多線程三分鐘就可以入個門了! Thread源碼剖析 多線程基礎(chǔ)必要知識點!看了學(xué)習(xí)多線程事半功倍 只有光頭才能變強! 本文章主要講的是Java多線程加鎖機制,有兩種: Synchronized 顯式Lock 不得不嘮...

    hyuan 評論0 收藏0
  • 分布式機制原理及實現(xiàn)方式

    摘要:分布式鎖實現(xiàn)方式前言目前幾乎很多大型網(wǎng)站及應(yīng)用都是分布式部署的,分布式場景中的數(shù)據(jù)一致性問題一直是一個比較重要的話題。基于數(shù)據(jù)庫實現(xiàn)分布式鎖基于緩存等實現(xiàn)分布式鎖基于實現(xiàn)分布式鎖。 前言 分布式鎖,是控制分布式系統(tǒng)之間同步訪問共享資源的一種方式 在分布式系統(tǒng)中,常常需要協(xié)調(diào)他們的動作。如果不同的系統(tǒng)或是同一個系統(tǒng)的不同主機之間共享了一個或一組資源,那么訪問這些資源的時候,往往需要互斥...

    yacheng 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<