第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

線程安全對象數(shù)組

線程安全對象數(shù)組

富國滬深 2022-06-30 18:36:46
我在 Java 中使用二維數(shù)組。但是現(xiàn)在,我想將這個類用于多線程。我怎樣才能做到這一點?我知道如何執(zhí)行線程安全功能(添加同步關(guān)鍵字)。如果同時觸發(fā) clear 和 getItem 函數(shù)會發(fā)生什么?在這種情況下,我該如何做線程安全的實例?public class ThreadSafeArray {    int ROW_MAX_COUNT = 1024;    int rowCount = 0;    int counterForRow = 0;    private Object [][] objInstances = new Object[ROW_MAX_COUNT][];    public synchronized void addItem(Object obj) {        if(counterForRow == ROW_MAX_COUNT) {            objInstances[++rowCount] = new Object[ROW_MAX_COUNT];            counterForRow = 0;        }        objInstances[rowCount][counterForRow++] = obj;    }    public synchronized  void clear() {        objInstances = new Object[ROW_MAX_COUNT][];        rowCount = 0;        counterForRow = 0;    }    public synchronized Object getItem(int index) {        int row = index / ROW_MAX_COUNT;        int column = index % ROW_MAX_COUNT;        if((row <= rowCount) && (column <= counterForRow)) {            return objInstances[row][column];        }        return null;    }}
查看完整描述

2 回答

?
SMILET

TA貢獻1796條經(jīng)驗 獲得超4個贊

在您的代碼中,clear并且getItem是實例方法。將同步放在實例方法上意味著線程必須在調(diào)用該方法的對象實例上獲取鎖(“內(nèi)在鎖”),然后線程才能開始執(zhí)行該方法中的任何代碼。

使實例方法同步有兩個效果(來自java指南):

  • 首先,同一對象上的同步方法的兩次調(diào)用不可能交錯。當(dāng)一個線程正在為一個對象執(zhí)行同步方法時,所有其他為同一對象調(diào)用同步方法的線程都會阻塞(暫停執(zhí)行),直到第一個線程處理完該對象。

  • 其次,當(dāng)同步方法退出時,它會自動與任何后續(xù)對同一對象的同步方法調(diào)用建立起之前的關(guān)系。這保證了對象狀態(tài)的更改對所有線程都是可見的。

因此,對于這兩種方法,您的類已經(jīng)是線程安全的。


查看完整回答
反對 回復(fù) 2022-06-30
?
慕田峪9158850

TA貢獻1794條經(jīng)驗 獲得超7個贊

如果同時觸發(fā) clear 和 getItem 函數(shù)會發(fā)生什么?

一個會等到另一個完成。

在這種情況下,我該如何做線程安全的實例?

它已經(jīng)是線程安全的。



查看完整回答
反對 回復(fù) 2022-06-30
  • 2 回答
  • 0 關(guān)注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號