Синхронизация незавершенного поля

Предупреждение отображается каждый раз, когда я выполняю синхронизацию с неокончательным полем класса. Вот код:

public class X  
{  
   private Object o;  

   public void setO(Object o)  
   {  
     this.o = o;  
   }  

   public void x()  
   {  
     synchronized (o) // synchronization on a non-final field  
     {  
     }  
   }  
 } 

, поэтому я изменил кодировку следующим образом:

 public class X  
 {  

   private final Object o;       
   public X()
   {  
     o = new Object();  
   }  

   public void x()  
   {  
     synchronized (o)
     {  
     }  
   }  
 }  

Я не уверен, что приведенный выше код является правильным способом синхронизации в поле незавершенного класса. Как я могу синхронизировать не финальное поле?

81
задан Draken 6 August 2019 в 11:01
поделиться