senkronize anahtar kelime kullanımı synchronized
anahtar kelime ile test ediyordum. Onu çalıştırdığınızda, iki iş parçacığı countMe()
yöntemini çağırarak çıktısı bu çıktıyı üretirÖğrenme Java,
public class MyTest {
static int i = 0;
public static void main(String[] args) {
new Thread(t1).start();
new Thread(t2).start();
}
private static void countMe(String name){
i++;
System.out.println("Current Counter is: " + i + ", updated by: " + name);
}
private static Runnable t1 = new Runnable() {
public void run() {
try{
for(int i=0; i<5; i++){
countMe("t1");
}
} catch (Exception e){}
}
};
private static Runnable t2 = new Runnable() {
public void run() {
try{
for(int i=0; i<5; i++){
countMe("t2");
}
} catch (Exception e){}
}
};
}
:
Current Counter is: 1
Current Counter is: 2
Current Counter is: 4
Current Counter is: 5
Current Counter is: 6
Current Counter is: 7
Current Counter is: 3
Current Counter is: 8
Current Counter is: 9
Current Counter is: 10
Ve ben yöntemini countMe()
değiştirdiğinizde:
Current Counter is: 1
Current Counter is: 2
Current Counter is: 3
Current Counter is: 4
Current Counter is: 5
Current Counter is: 6
Current Counter is: 7
Current Counter is: 8
Current Counter is: 9
Current Counter is: 10
01:
private synchronized static void countMe(){
i++;
System.out.println("Current Counter is: " + i);
}
Bu çıktıyı almak
Bu bana synchronized
'un amacını net bir şekilde anlatabilmesine rağmen, synchronized
'u kullanabileceğimiz başka bir neden olduğunu da bilmek istiyorum. Ya da burada yaptığım şey, bu synchronized
anahtar kelimesinin kullanılmasına neden ihtiyaç duyduğumuz tek mi?
Teşekkürler.
DÜZENLEME: Birlikte karıştı başka şey sayaç Bana biraz imkansız görünüyor, ancak benzer sonuçlar denemek her zaman olur do 7 sonra 3'e gitti neden ilk çıktıda, bu normaldir olmasıdır ?
Bu parçaların değiştiği konusunda garanti verilmez. 3 sayılan iş parçacığı, diğer iş parçacığı 7'ye kadar sayım yapana kadar yazdırılamayabilir. –
teşekkürler, ancak sonraki 7 yazdırma baskısı nasıl olur? 3. Yani 6 veya 5 yazabilirim, ancak bu yeni yöntem çağrısı gibi görünüyor 3 sonra ben okumadım, bu çok garip geliyor. Yani her zaman 2 veya daha fazla iş parçacığı aynı kod bloğu kullanmak zorunda zaman senkronize kullanmak akıllıca olmalı? – 911TurboS
İş parçacığının adını yazdırmanızı öneririm ve karışıklığın nerede olduğu konusunda daha açık hale gelir. Eşzamanlılık karmaşık bir konu ve basit cevaplar yok. Tercihim, aktör kalıplarını kullanmak ve mümkün olduğu kadar iş parçacıkları arasında çok az veri paylaşmak. ideal olarak, yok. Kodu çok verimli bir şekilde işleyen bir iş parçacığı genellikle yeterlidir. –