免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Java:如何同步數(shù)組訪問以及對(duì)同步條件中的內(nèi)容有何限制

我有一個(gè)2×2陣列,我有兩個(gè)線程在運(yùn)行.

可以在數(shù)組中使用java中的synchronized語句嗎?

鎖定如何工作? java教程線程說同步語句適用于對(duì)象,所以我不確定它們是什么意思.另一個(gè)網(wǎng)站說我可以發(fā)表一個(gè)聲明

synchronized (array1[]){}

這是否同步訪問數(shù)組中的所有內(nèi)容,以便將數(shù)組鎖定到其他線程?

如果我有一個(gè)二維數(shù)組我可以使用

synchronized(array1 [i])來鎖定數(shù)組的一行?

是否可以鎖定單個(gè)數(shù)組值
喜歡的東西

synchronized (array1[i][j]){}

但是,非常感謝提示或幫助.實(shí)際上我已經(jīng)把它打開了,無論是否正確.但我想知道將來使用

解決方法:

是的,您可以使用數(shù)組作為監(jiān)視器對(duì)象進(jìn)行同步,因?yàn)閿?shù)組(甚至是基元數(shù)組)是Java中的對(duì)象.

您可以在特定監(jiān)視器上同步代碼塊,如下所示:

public void myMethod() {    unsynchronized_statements...    synchronized(myMonitorObject) {        synchronized_statments...    }

最佳做法是盡可能少地同步代碼行.

在監(jiān)視器上同步代碼不會(huì)以任何方式影響監(jiān)視器,它只影響訪問同步代碼塊的線程.在線程執(zhí)行可以進(jìn)入代碼塊之前,它必須在監(jiān)視器上獲得“鎖定”. Java運(yùn)行時(shí)確保一次最多一個(gè)線程可以在監(jiān)視器上具有“鎖定”.因此,在數(shù)組上進(jìn)行同步不會(huì)禁止不同步的代碼塊來訪問它!訣竅是確保您不希望同時(shí)發(fā)生的所有操作都在同一監(jiān)視器上同步的塊內(nèi).

由于Java不提供多維數(shù)組,只提供數(shù)組數(shù)組,因此您可以在嵌套數(shù)組上進(jìn)行同步,以實(shí)現(xiàn)更細(xì)粒度的同步.如果將2d數(shù)組建模為行數(shù)組,則只能在行上而不是在列上進(jìn)行同步,因?yàn)樵谠撌纠?列不表示為單獨(dú)的數(shù)組.

如果這些值是非原始值,則只能對(duì)單個(gè)數(shù)組值進(jìn)行同步,因此Integer()而不是int.請(qǐng)注意,Integer()是一個(gè)不可變對(duì)象,因此您無法更改其值.一個(gè)解決方案是使用getter和setter為包含的數(shù)值創(chuàng)建自己的Cell()包裝器對(duì)象.這將允許您讓一個(gè)線程獲取Cell上的鎖并安全地更改其值.

因?yàn)檫@是我的休息日,所以我決定玩得開心,并創(chuàng)建了一個(gè)你所描述的實(shí)例.是的,這是我開心的想法.

類別:

> Matrix:表示2d細(xì)胞矩陣
> Cell:矩陣單元格值的包裝器
> Operation:對(duì)單元格數(shù)組的抽象操作
> IncrementOperation:增加每個(gè)Cell值的操作
> ReverseOperation:一種顛倒細(xì)胞順序的操作
> Main:申請(qǐng)

應(yīng)用程序在同一矩陣上啟動(dòng)多個(gè)操作.唯一的同步代碼塊在類Operation中.如果刪除同步,結(jié)果將是錯(cuò)誤的,因?yàn)閮蓚€(gè)操作同時(shí)操作同一行.

同步輸出:

[105, 104, 103, 102, 101][110, 109, 108, 107, 106][115, 114, 113, 112, 111][120, 119, 118, 117, 116][125, 124, 123, 122, 121][130, 129, 128, 127, 126][135, 134, 133, 132, 131][140, 139, 138, 137, 136][145, 144, 143, 142, 141][150, 149, 148, 147, 146]

NOT同步時(shí)的輸出示例:

[105, 4, 103, 102, 101][110, 9, 108, 207, 106][115, 14, 113, 212, 111][120, 19, 118, 217, 116][125, 124, 123, 122, 121][130, 129, 128, 127, 126][135, 34, 133, 232, 131][140, 139, 138, 137, 136][145, 144, 143, 142, 141][150, 149, 148, 147, 146]

請(qǐng)注意,我在操作實(shí)現(xiàn)中添加了一些Thread.sleep()語句,以使同步和非同步執(zhí)行之間的區(qū)別更加明顯.

來源:https://www.icode9.com/content-1-489051.html
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java并發(fā)-對(duì)象監(jiān)視器
java的線程同步
Java中存在的幾種處理方式
Java Threads 多線程10分鐘參考手冊
java基礎(chǔ)有關(guān)的面試題
并發(fā)總結(jié)1-線程、中斷、鎖(Lock)、協(xié)作
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服