我的Java代碼如下所示:方法上一個更新的領域同步
class xHandler
{
private Channel _channel;
// Methods...
void init()
{
_channel = new Channel(...);
synchronized (_channel)
{
// Do some stuff here...e.g.
_channel.send("...");
}
}
}
在其他文件(線程)創建頻道的情況,並參照使用對象的送東西,但只在init方法上面提到我需要它同步,並沒有其他線程應該打開一個頻道,並在此期間發送的東西。
FindBugs的給了我一個名爲警告:方法上同步更新的領域
這種方法同步從一個可變字段引用的對象上。 這不太可能有用的語義,因爲不同的線程可能在不同的對象上進行同步。
我該如何解決這個問題?用簡單的測試可以輕鬆觸發這個問題嗎?
你的代碼是無效的 - 你不能你'init'方法中聲明場......沒有你的意思是要一個簡單的任務? – 2012-03-14 14:06:21
可變字段意味着專用Channel _channel不是最終的。嘗試設置場地決賽; – darijan 2012-03-14 14:07:22
Thx喬恩Skeet的提示,我編輯,現在應該是正確的。 – arge 2012-03-14 14:23:07