2011-03-27 38 views
18

Böyle bir şey bildirebilir miyim?Uçucu değişken, javada statik olarak tanımlanabilir mi?

static volatile boolean first=false; 
+18

bunu denediniz mi? ne oldu? – Mat

+13

Bu site Google’ın yerine geçmez ve dokümanları okuyamaz. Size "hazır" cevaplar getirmek için bir site değil. Normal aramayla kolayca cevap bulamadığınız programlama ile ilgili belirli sorular sormanız gerekiyor. İyi cevaplar istiyorsanız, en azından sorularınızı net (yazım, büyük harf kullanımı, kod formatlama sayısı) yapmaya çalışın. Bu sorunun cevabını, 30'lu googlingte bulabilirsiniz. – Mat

+1

@Saurabh: Tam olarak bu nokta. Cevabı kendiniz bulabilirseniz soruyu soran nokta nedir? Bu site insanlara soru sorma amacı taşımamaktadır, çünkü böyle hissettiriyorlar, sorun yaşadıkları kişilere yardımcı olmak, tercihen sadece kendileriyle uğraştıktan sonra. 30'lu yaşlarda kendinize bir cevap bulmak yerine, kendinize cevap verebilmeniz için bir kaç dakika * başka * insanın zamanını harcadığınızı söylüyorsunuz. – Mac

cevap

57

Michael'ın yorumunu genişletmek için.

static

sadece içeren sınıfın bir örneği ile ilişkili olmayan anlamına gelir.

volatile sadece değeri uyarı olmadan diğer iplikler ile değiştirilebilir olduğu anlamına gelir.

Yani soru aşağı kaynar "içeren sınıfının bir örneği ile ilişkili olmayan bir saha uyarmadan başka bir iş parçacığı tarafından değiştirilebilir?" Michael belirttiği gibi

, bu sorunun cevabı evet. Örnek ilişkisi eşzamanlı modifikasyona ortogonaldir.

+6

Şimdi bu mükemmel bir cevapları gibi .. meraktan –

+0

http://stackoverflow.com/questions/2423622/volatile-vs-static-in-java –

+1

, bir 'final' orada neyi tanıtmak olur? – Skynet

7

Elbette. İki modifiye edicinin etkileri tamamen ortogonaldir.

19

Evet, yapabilirsiniz.

Java bir static değişken (nesnesi için, örneğin, statik olmayan değişken olarak bir kez olan) sınıfı bir kere saklanır. Bu, tüm nesnelerin (ve statik yöntemlerin) aynı değişkeni paylaştığı anlamına gelir.

Bir değişkeni volatile olarak bildirmek (bu static olsun veya olmasın) değişkenin çok sayıda iş parçacığı tarafından sık sık erişileceğini belirtir. Java'da bu, iş parçacığına, değişkenin değerini önleyemediklerini öğretmekle kalmaz, ancak diğer parçacıkların değişikliği görmesi için mutasyondan hemen sonra geriye yazmak zorunda kalır. (Java'daki iş parçacıkları, değişkenleri varsayılan olarak önbelleğe almakta serbesttir).

+0

Başka ilginç bir soru şu olurdu: “Statik” ve “statik bir değişken” değişkeni arasında bir fark var mı? Bir keresinde statik değişkenlerin iş parçacıkları tarafından önbelleğe alınmadığını okudum, bu yüzden değişken bir statik değişken bildirmek gerçekten gerekli değil mi? Bu konuda yorumlarınız var mı? – basZero

+3

Gerçekten bir fark var ve cevaptan çıkar: A 'statik 'değişkeni her sınıfta bir kez saklanır. Bir "statik volatile" değişkeni, her bir sınıf için bir kez saklanır. _and_, çok sayıda iş parçacığı tarafından sık sık erişilir, yani okumalar önbelleğe alınamaz. –