2013-01-06 9 views
8

Bu gerçekten apaçık olmalıdır, ancak cevabı fark edemiyorum. Ben yarış tehlike koşullarının birkaç kaçınılması emin olmak için bir değişken etrafında bir kilit koymak gerekir. Görebildiğim kadarıyla, oldukça basit bir çözüm android docs göre, Kilit kullanarak Varlığından:nasıl Android'de bir Kilidi (concurrent.locks.Lock) oluşturulur?

Lock l = ...; 
l.lock(); 
try { 
    // access the resource protected by this lock 
} 
finally { 
    l.unlock(); 
} 

Buraya kadar her şey iyi. Ancak, ilk satır çalışmasını yapamam. Bu gibi bir şey gibi görünüyor:

Lock l = new Lock(); 

doğru olabilirdi, fakat rapor gölgede, "type Kilit örneğini Can not" - ve daha fazla.

Herhangi bir öneriniz var mı? Eğer bir Lock kullanımıyla ilgili çok keskin iseniz

+2

google: java senkronize bir blok muhtemelen yeterli olacaktır senaryoyu ele bloğu – Leonidos

cevap

11

, bir Lock uygulaması gibi olamaz örneğini arayüzleri seçmek gerekir.

Muhtemelen ile muhtemelen ReentrantLock aradığınız bazı Condition s Bu yerine Lock l = new Lock(); ait yapmanız anlamına gelir

:

ReentrantLock lock = new ReentrantLock(); 

Ancak 'hepinizi eğer kilitlemek için ihtiyaç yeniden küçük bir bölümü, (@Leonidos & @assylias tarafından önerilen) senkronize bir blok/yöntem temizleyici olmasıdır. Eğer değerini ayarlayan bir yöntem varsa

, yapabileceğiniz:

public synchronized void setValue (var newValue) 
{ 
    value = newValue; 
} 

veya bu daha büyük bir yöntemin bir parçası ise: bir arayüzdür

public void doInfinite() 
{ 
    //code 
    synchronized (this) 
    { 
    value = aValue; 
    } 
} 
+0

senkronize. – assylias

+0

Herkese teşekkürler, şimdi devam edebilirim :-) –

1

Sadece Lock çünkü örneklenemez. Alt sınıflarını kullanın.