在Java中,我有2個線程都訪問(不修改)相同的BufferedImage。我只是用這樣的代碼將緩衝圖像繪製到獨立的Graphics2D對象中。正在訪問BufferedImage線程安全
Graphics2D g = getGraphics();
g.drawImage(myImage, 0, 0, null);
是否有任何理由需要同步訪問圖像?
我知道AWTEventThread不是線程安全的等我只是在後臺線程中構建一些BufferedImages。
謝謝了...
在Java中,我有2個線程都訪問(不修改)相同的BufferedImage。我只是用這樣的代碼將緩衝圖像繪製到獨立的Graphics2D對象中。正在訪問BufferedImage線程安全
Graphics2D g = getGraphics();
g.drawImage(myImage, 0, 0, null);
是否有任何理由需要同步訪問圖像?
我知道AWTEventThread不是線程安全的等我只是在後臺線程中構建一些BufferedImages。
謝謝了...
(你的問題實際上並不匹配在身體描述的場景的標題,所以我假設你是問關於這兩種情況下...)
兩個線程都只是一個訪問(此時)不變的BufferedImage
不需要在它們自己之間同步。
但是,確實需要在首先創建並初始化對象的線程與隨後讀取該線程的任何線程之間發生先發生關係。沒有那個同步點,讀線程可能會看到圖像數據結構的部分陳舊值。
即使在另一個只讀線程,在美國東部時間所做的更改必須成爲可見,這需要一些形式同步創建happens-before關係。顯示了幾種替代方案here。
爲了澄清,在任一線程訪問緩衝圖像之前創建緩衝圖像。他們都只是訪問一個不變的緩衝圖像。我問的原因是因爲BufferedImage不是一個可變對象。 g.drawImage可能會修改它。我認爲它不是 – awinbra 2011-06-11 18:49:49