Java nasıl bir iş parçacığı başka bir iş parçacığı'çıkış s bekletmek?
Uygulama-mantık-iplik ve bir veritabanı erişim iş parçacığı için bir Java uygulaması yapıyorum.
Her ikisi de uygulama kullanım süresi boyunca devam etmektedir. Ancak, başlangıçta app db iplik iplik hazır (şu anda yoklama özel bir yöntem dbthread.isReady()
tarafından belirlenen) bekler emin olmak istiyorum.
Eğer db iplik kadar uygulama iş parçacığı blokları hazır olsaydı benim için sorun olmazdı.
Thread.join()
çözüm - uygulama kapatma sırasında db iplik tek çıkar benzemiyor.
while (!dbthread.isReady()) {}
işe yarıyor, ama boş döngü işlemci döngüsü tüketir.
Başka fikri olan? Teşekkürler.
CEVAP
Gerçekten çoklu büyülü dünyasında başlamadan önce Sun's Java Concurrency gibi bir öğretici ile gitmek tavsiye ederim.
Aynı zamanda iyi bir kitap vardır (Google'da "Java Eşzamanlı Programlama", "Uygulamada Java Eşzamanlılık".
Cevabınız için:
Kodunda böyle bir şey olması gerekir dbThread
beklemek gerekir:
//do some work
synchronized(objectYouNeedToLockOn){
while (!dbThread.isReady()){
objectYouNeedToLockOn.wait();
}
}
//continue with work after dbThread is ready
**8'in yöntemi, olur böyle şeyler yapmak lazım:
//do db work
synchronized(objectYouNeedToLockOn){
//set ready flag to true (so isReady returns true)
ready = true;
objectYouNeedToLockOn.notifyAll();
}
//end thread run method here
objectYouNeedToLockOn
kullanıyorum bu örneklerde olduğu tercihen nesne gerekir işlemek için aynı anda her iş parçacığı, ya da sen-ebil yaratmak ayrı Object
Bu amaçla (olmaz tavsiye verme yöntemleri kendilerini senkronize):
private final Object lock = new Object();
//now use lock in your synchronized blocks
Daha anlayışınız için:
Bazen de daha yukarıda, örneğin CountdownLatches
, vb yapmak için başka yolları da vardır. Java 5'den beri java.util.concurrent
paketinde şık eşzamanlılık pek çok ders ve paketler alt. Gerçekten malzeme online eşzamanlılık olduğunu, ya da iyi bir kitap almak için bulmalıyız.
Java nasıl bir iş parçacığı öldürüyors...
Java nasıl bir iş Parçacığı için bir p...
Nasıl düzgün Java iş Parçacığı durdurm...
Bir iş parçacığı havuzu iş parçacığı k...
Nasıl Java başka bir kurucu arayayım m...