![]() | |
| | #1 (permalink) |
| Üye Üyelik Tarihi: 07/2006
Mesaj: 80
|
gecen threadlerle ilgili örneklere bakarken, ilk bir kaç örneği anladım sorun yoktu ( run(), sleep(); vb.. ) fakat synchronized olayını kavrayamadım? nerde işe yarıyo nasıl, ne zaman kullanmalı, bunları açıklayan olursa sevinirim teşekkürler. |
| | |
| | #2 (permalink) |
| Eski Cevizci Üyelik Tarihi: 05/2004
Mesaj: 792
| Kod: syncronized(nesne) {
// kod
}
Programci bu yolla bir nesnenin ayni anda birden cok thread tarafindan kullanilmasini onlemeye calisir, cunku bu hatalara yok acabilir. Ayrica: Kod: synchronized void birsey() {
// kod
}
Kod: void birsey() {
synchronized(this) {
// kod
}
}
|
| | |
| | #3 (permalink) |
| Eski Cevizci Üyelik Tarihi: 06/2003
Mesaj: 131
|
multi-thread bir uygulama yazıyor olalım. klasik ornek; producer-consumer ornegi bu konuda. producer ürettiği dataları bir pool'a koyar. Orneğimiz için pool bir ArrayList olsun. Consumer üretilen dataları bir şekilde tüketiyor olacak, tükettiğinide listeden silecek. Consumer ve Producer eş zamanlı çalışan iki thread'dir. Burada consumer ve producer'in listeye eş zamanlı erişimini engellemek lazım. Yoksa senkronizasyon ile ilgili problemler yaşarsın. Listeden consumer işlemek için aldığı datayı silerken Producer data yazmaya çalışırsa (emin değilim ama) IndexOutOfBounds exception yersin(yada onun gibi bir exception). Bu durumda(ve benzer durumlarda) yapılması gereken pool'a erişen her bir thread'in sıralı erişimini sağlamaktır. Bunu için genel yöntem pool'a erişim için bir helper class yazmak ve pool'a erişen metodları(veya blokları) synchronized anahtar kelimesi ile marklamaktır. Şöyleki; <code> public class PoolHelper { private LinkedHashMap<String, Command> pool= new LinkedHashMap<String, Command>(); public synchronized void addCommand(Command command) { pool.put( command.getCommandId(), command ); notifyAll(); //notify for new command } protected synchronized Command getLastCommand() { if( pool.size()>0 ) { for( Iterator i= pool.keySet().iterator(); i.hasNext(); ) { String key= (String)i.next(); Command command= pool.get(key); if( command.isInProcess() ) continue; if( command.getResendDate()!=null && command.getResendDate().getTime()>System.currentTi meMillis() ) continue; command.setInProcess( true ); return command; } } try { wait(1*1000); //wait for new command } catch (InterruptedException e) { } return null; } } </code> birde semafor/monitor/lock kavramları var sen metodu synchronized olarak marklarsan bu o metod'un monitor olarak kullanılacağı anlamına gelir. Bütün metodları instance üzerinden senkronlamanın mantıklı olmadığı durumlarda(bazı metodların/blokların diğer tüm metod ve bloklama senkron olması performans açısından iyi olmayabilir), monitor değişkenleri kullanabilirsin. bunun için metod değil blok synchronized içine alınır. Synchronized blokların, synchronized metodlardan başka detay farklarıda var ama şimdilik boşver. yukarıdaki ornekte göreceğin gibi wait ve notify/notifyAll yapıları var. bunlarıda anlamaya çalış. anlayamadığın yerleri bu başlık altında sorabilirsin. dilimin dondüğü ve bildiğim kadarı ile yardımcı olmaya çalışırım. Not: thread'in ne olduğunu anlaman multi-threading'i anlamaya başlamadan once mutlaka doğru olarak anlaman gereken bir şey. Thread kabaca bir sınıf değil, bir execution order'dir. Şu linkteki tutorial'i izlemeni oneririm: http://java.sun.com/docs/books/tutor...rocthread.html kolaylıklar... Enson 24/04/2007 20:34 tarihinde karatoprak tarafından düzenlenmiştir.. Sebep: düzeltme |
| | |
![]() |
| Bookmarks |
| Seçenekler | |
| |
Benzer Konular | ||||
| Konu | Konuyu açana göre | Forum | Cevap | En Son Mesaj |
| C# ta C++ taki dynamic cast kavramı? | cskli | C# | 0 | 17/04/2007 13:05 |
| ADSL de hız kavramı? | suat2007_ | Internet | 11 | 30/03/2007 19:54 |
| Programlamadaki "Handle" kavramı nedir? | ozmeen | Genel Programlama | 1 | 01/03/2007 16:41 |
| Nasıl yükseklik/derinlik kavramı verilebilir? | Xone | Flash / Director / Swift 3D ... | 3 | 30/07/2006 19:56 |
| sınıf nedir? obje nedir? bunların veritipi ile bağlantısı nedir? | sckz | C / C++ | 46 | 30/07/2005 02:35 |
| Reklamlar & Desteklenenler | |
| Hassas Valf | Hassas Kaplama | Antalyamız | Gazete | Ticari Bilişim | Hakan Müştak | Rüya Tabirleri | Kadın | Hastalıklar | Cepte msn ve e-posta | Webmaster | Antalya Aupair | Turkish Property Antalya | Forum | Chat | Perde | Adsl | Araba | bolindir.com | guncelle.com | livescore | Web Tasarım | evden eve nakliyat | forum | evden eve | sohbet | Resimcim| Kalifiye İnsan Kaynakları | Web Tasarım | Oyun | Yusuf KOÇ | Akın Yorulmaz | şiir | UFO | Web Tasarım | Oyunlar | Canlı Tv | |