国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

            當(dāng)前位置:首頁(yè)  >  行業(yè)資訊  > Java開(kāi)發(fā)面試題:如何保證同一資源被多個(gè)線程并發(fā)訪問(wèn)時(shí)的完整性?

            Java開(kāi)發(fā)面試題:如何保證同一資源被多個(gè)線程并發(fā)訪問(wèn)時(shí)的完整性?

            來(lái)源:千鋒教育
            發(fā)布人:千鋒老師
            時(shí)間: 2019-02-25 14:55:00 1551077700

              常用的同步方法是采用信號(hào)或加鎖機(jī)制,確保資源在任意時(shí)刻至多被一個(gè)線程訪問(wèn)。Java語(yǔ)言在多線程編程上實(shí)現(xiàn)了完全對(duì)象化,提供了對(duì)同步機(jī)制的良好支持。

              在Java中一共有四種方法支持同步,其中前三個(gè)是同步方法,一個(gè)是管道方法。管道方法不建議使用,阻塞隊(duì)列方法在問(wèn)題4已有描述,現(xiàn)只提供前兩種實(shí)現(xiàn)方法。

              - wait()/notify()方法

              - await()/signal()方法

              - BlockingQueue阻塞隊(duì)列方法

              - PipedInputStream/PipedOutputStream

              一、生產(chǎn)者類:

              ```

              public class Producer extends Thread { // 每次生產(chǎn)的產(chǎn)品數(shù)量

              private int num;

              // 所在放置的倉(cāng)庫(kù)

              private Storage storage;

              // 構(gòu)造函數(shù),設(shè)置倉(cāng)庫(kù)

              public Producer(Storage storage) {

              this.storage = storage;

              }

              // 線程run函數(shù)

              public void run() {

              produce(num);

              }

              // 調(diào)用倉(cāng)庫(kù)Storage的生產(chǎn)函數(shù)

              public void produce(int num) {

              storage.produce(num);

              }

              public int getNum() {

              return num;

              }

              public void setNum(int num) {

              this.num = num;

              }

              public Storage getStorage() {

              return storage;

              }

              public void setStorage(Storage storage) {

              this.storage = storage;

              }

              }

              ```

              二、消費(fèi)者類:

              ```

              public class Consumer extends Thread { // 每次消費(fèi)的產(chǎn)品數(shù)量

              private int num;

              // 所在放置的倉(cāng)庫(kù)

              private Storage storage;

              // 構(gòu)造函數(shù),設(shè)置倉(cāng)庫(kù)

              public Consumer(Storage storage) {

              this.storage = storage;

              }

              // 線程run函數(shù)

              public void run() {

              consume(num);

              }

              // 調(diào)用倉(cāng)庫(kù)Storage的生產(chǎn)函數(shù)

              public void consume(int num) {

              storage.consume(num);

              }

              // get/set方法

              public int getNum() {

              return num;

              }

              public void setNum(int num) {

              this.num = num;

              }

              public Storage getStorage() {

              return storage;

              }

              public void setStorage(Storage storage) {

              this.storage = storage;

              }

              }

              ```

              倉(cāng)庫(kù)類:(wait()/notify()方法)

              ```

              public class Storage { // 倉(cāng)庫(kù)最大存儲(chǔ)量

              private final int MAX_SIZE = 100;

              // 倉(cāng)庫(kù)存儲(chǔ)的載體

              private LinkedList list = new LinkedList();

              // 生產(chǎn)num個(gè)產(chǎn)品

              public void produce(int num) {

              // 同步代碼段

              synchronized (list) {

              // 如果倉(cāng)庫(kù)剩余容量不足

              while (list.size() + num > MAX_SIZE) {

              System.out.print("【要生產(chǎn)的產(chǎn)品數(shù)量】:" + num);

              System.out.println(" 【庫(kù)存量】:" + list.size() + " 暫時(shí)不能執(zhí)行生產(chǎn)任務(wù)!");

              try {

              list.wait();// 由于條件不滿足,生產(chǎn)阻塞

              } catch (InterruptedException e) {

              e.printStackTrace();

              }

              }

              // 生產(chǎn)條件滿足情況下,生產(chǎn)num個(gè)產(chǎn)品

              for (int i = 1; i <= num; ++i) {

              list.add(new Object());

              }

              System.out.print("【已經(jīng)生產(chǎn)產(chǎn)品數(shù)】:" + num);

              System.out.println(" 【現(xiàn)倉(cāng)儲(chǔ)量為】:" + list.size());

              list.notifyAll();

              }

              }

              // 消費(fèi)num個(gè)產(chǎn)品

              public void consume(int num) {

              // 同步代碼段

              synchronized (list) {

              // 如果倉(cāng)庫(kù)存儲(chǔ)量不足

              while (list.size() < num) {

              System.out.print("【要消費(fèi)的產(chǎn)品數(shù)量】:" + num);

              System.out.println(" 【庫(kù)存量】:" + list.size() + " 暫時(shí)不能執(zhí)行生產(chǎn)任務(wù)!");

              try {

              // 由于條件不滿足,消費(fèi)阻塞

              list.wait();

              } catch (InterruptedException e) {

              e.printStackTrace();

              }

              }

              // 消費(fèi)條件滿足情況下,消費(fèi)num個(gè)產(chǎn)品

              for (int i = 1; i <= num; ++i) {

              list.remove();

              }

              System.out.print("【已經(jīng)消費(fèi)產(chǎn)品數(shù)】:" + num);

              System.out.println(" 【現(xiàn)倉(cāng)儲(chǔ))量為】:" + list.size());

              list.notifyAll();

              }

              }

              // get/set方法

              public LinkedList getList() {

              return list;

              }

              public void setList(LinkedList list) {

              this.list = list;

              }

              public int getMAX_SIZE() {

              return MAX_SIZE;

              }

              }

              ```

              倉(cāng)庫(kù)類:(await()/signal()方法)

              ```

              public class Storage { // 倉(cāng)庫(kù)最大存儲(chǔ)量

              // 倉(cāng)庫(kù)最大存儲(chǔ)量

              private final int MAX_SIZE = 100;

              // 倉(cāng)庫(kù)存儲(chǔ)的載體

              private LinkedList list = new LinkedList();

              // 鎖

              private final Lock lock = new ReentrantLock();

              // 倉(cāng)庫(kù)滿的條件變量

              private final Condition full = lock.newCondition();

              // 倉(cāng)庫(kù)空的條件變量

              private final Condition empty = lock.newCondition();

              // 生產(chǎn)num個(gè)產(chǎn)品

              public void produce(int num) {

              // 獲得鎖

              lock.lock();

              // 如果倉(cāng)庫(kù)剩余容量不足

              while (list.size() + num > MAX_SIZE) {

              System.out.print("【要生產(chǎn)的產(chǎn)品數(shù)量】:" + num);

              System.out.println(" 【庫(kù)存量】:" + list.size() + " 暫時(shí)不能執(zhí)行生產(chǎn)任務(wù)!");

              try {

              // 由于條件不滿足,生產(chǎn)阻塞

              full.await();

              } catch (InterruptedException e) {

              e.printStackTrace();

              }

              }

              // 生產(chǎn)條件滿足情況下,生產(chǎn)num個(gè)產(chǎn)品

              for (int i = 1; i <= num; ++i) {

              list.add(new Object());

              }

              System.out.print("【已經(jīng)生產(chǎn)產(chǎn)品數(shù)】:" + num);

              System.out.println(" 【現(xiàn)倉(cāng)儲(chǔ)量為】:" + list.size());

              // 喚醒其他所有線程

              full.signalAll();

              empty.signalAll();

              // 釋放鎖

              lock.unlock();

              }

              // 消費(fèi)num個(gè)產(chǎn)品

              public void consume(int num) {

              // 獲得鎖

              lock.lock();

              // 如果倉(cāng)庫(kù)存儲(chǔ)量不足

              while (list.size() < num) {

              System.out.print("【要消費(fèi)的產(chǎn)品數(shù)量】:" + num);

              System.out.println(" 【庫(kù)存量】:" + list.size() + " 暫時(shí)不能執(zhí)行生產(chǎn)任務(wù)!");

              try {

              // 由于條件不滿足,消費(fèi)阻塞

              empty.await();

              } catch (InterruptedException e) {

              e.printStackTrace();

              }

              }

              // 消費(fèi)條件滿足情況下,消費(fèi)num個(gè)產(chǎn)品

              for (int i = 1; i <= num; ++i) {

              list.remove();

              }

              System.out.print("【已經(jīng)消費(fèi)產(chǎn)品數(shù)】:" + num);

              System.out.println(" 【現(xiàn)倉(cāng)儲(chǔ))量為】:" + list.size());

              // 喚醒其他所有線程

              full.signalAll();

              empty.signalAll();

              // 釋放鎖

              lock.unlock();

              }

              // set/get方法

              public int getMAX_SIZE() {

              return MAX_SIZE;

              }

              public LinkedList getList() {

              return list;

              }

              public void setList(LinkedList list) {

              this.list = list;

              }

              }

             

            tags:
            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學(xué) 138****2860 剛剛成功領(lǐng)取
            王同學(xué) 131****2015 剛剛成功領(lǐng)取
            張同學(xué) 133****4652 剛剛成功領(lǐng)取
            李同學(xué) 135****8607 剛剛成功領(lǐng)取
            楊同學(xué) 132****5667 剛剛成功領(lǐng)取
            岳同學(xué) 134****6652 剛剛成功領(lǐng)取
            梁同學(xué) 157****2950 剛剛成功領(lǐng)取
            劉同學(xué) 189****1015 剛剛成功領(lǐng)取
            張同學(xué) 155****4678 剛剛成功領(lǐng)取
            鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
            董同學(xué) 138****2867 剛剛成功領(lǐng)取
            周同學(xué) 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            PMP?認(rèn)證榮獲北京市境外職業(yè)資格認(rèn)可!

            北京市人力資源和社會(huì)保障局、北京市人才工作局近日發(fā)布了關(guān)于印發(fā)《北京市境外職業(yè)資格認(rèn)可目錄(3.0版)》的通知,新版目錄境外職業(yè)資格清單...詳情>>

            2023-09-07 17:27:00
            怎么選擇靠譜的短視頻運(yùn)營(yíng)培訓(xùn)機(jī)構(gòu)?

            怎么選擇靠譜的短視頻運(yùn)營(yíng)培訓(xùn)機(jī)構(gòu)?5G時(shí)代的來(lái)臨,短視頻作為新媒體中最為主流的內(nèi)容更加方便用戶瀏覽觀看信息,因此抖音、快手這類的短視頻平...詳情>>

            2023-09-07 15:05:06
            全媒體短視頻運(yùn)營(yíng)好就業(yè)么?

            全媒體短視頻運(yùn)營(yíng)好就業(yè)么?現(xiàn)在學(xué)習(xí)互聯(lián)網(wǎng)運(yùn)營(yíng)可不能只會(huì)單個(gè)的運(yùn)營(yíng)技術(shù),企業(yè)更喜歡全能型人才。如今的互聯(lián)網(wǎng)世界有多種平臺(tái),新媒體、短視頻...詳情>>

            2023-09-07 14:49:25
            短視頻運(yùn)營(yíng)培訓(xùn)機(jī)構(gòu)有用嗎?

            短視頻運(yùn)營(yíng)培訓(xùn)機(jī)構(gòu)有用嗎?短視頻的火熱,催生了一大批的網(wǎng)絡(luò)紅人、網(wǎng)紅賬號(hào),這些短視頻賬號(hào)通過(guò)實(shí)現(xiàn)粉絲流量變現(xiàn),獲得了非常豐厚的收入,自...詳情>>

            2023-09-06 13:49:12
            大數(shù)據(jù)分析就業(yè)高薪崗位介紹

            大數(shù)據(jù)分析就業(yè)高薪崗位介紹?大數(shù)據(jù)行業(yè)是一個(gè)快速發(fā)展的行業(yè),其主要特征是數(shù)據(jù)規(guī)模龐大、種類多樣、處理復(fù)雜。目前,大數(shù)據(jù)行業(yè)已經(jīng)成為全球...詳情>>

            2023-09-06 13:42:47
            開(kāi)班信息
            北京校區(qū)
            • 北京校區(qū)
            • 大連校區(qū)
            • 廣州校區(qū)
            • 成都校區(qū)
            • 杭州校區(qū)
            • 長(zhǎng)沙校區(qū)
            • 合肥校區(qū)
            • 南京校區(qū)
            • 上海校區(qū)
            • 深圳校區(qū)
            • 武漢校區(qū)
            • 鄭州校區(qū)
            • 西安校區(qū)
            • 青島校區(qū)
            • 重慶校區(qū)
            • 太原校區(qū)
            • 沈陽(yáng)校區(qū)
            • 南昌校區(qū)
            • 哈爾濱校區(qū)