Bir yöntem yalnızca yerel değişkenlere erişiyorsa, iş parçacığı için güvenlidir. Öyle mi?
Kesinlikle hayır. Tek bir iş parçacığından erişilen tek bir yerel değişkeni içeren, ancak iş parçacığı için güvenli olmayan bir program yazabilirsiniz:
https://stackoverflow.com/a/8883117/88656
Bu statik yöntemler için de geçerli mi?
Kesinlikle hayır.
@Cybis tarafından sağlanan bir cevap şuydu: "Yerel değişkenler evreler arasında paylaşılamaz, çünkü her evre kendi yığınını alır."
Kesinlikle hayır. Bir yerel değişkenin ayırt edici özelliği, değişken havuzda tahsis edilmemesi değil , yalnızca yerel kapsamdan görülebilir olmasıdır . Aynı yasal değişkene iki farklı evreden erişmek tamamen yasaldır ve mümkündür. Bunu anonim yöntemler, lambdalar, yineleyici bloklar veya zaman uyumsuz yöntemler kullanarak yapabilirsiniz.
Statik yöntemler için de durum böyle mi?
Kesinlikle hayır.
Bir yönteme bir referans nesne aktarılırsa, bu iplik güvenliğini bozar mı?
Olabilir.
Biraz araştırma yaptım ve bazı durumlar hakkında çok şey var, ancak bir yöntemin güvenli olduğundan emin olmak için takip etmek için sadece birkaç kural kullanarak yönergeleri tanımlayabilmeyi umuyordum.
Hayal kırıklığı ile yaşamayı öğrenmek zorunda kalacaksınız. Bu çok zor bir konu.
Yani, sanırım nihai sorum: "İş parçacığı için güvenli bir yöntem tanımlayan kuralların kısa bir listesi var mı?
Hayır! Örneğimden daha önce gördüğünüz gibi , boş bir yöntem iş parçacığı için güvenli olmayabilir . Siz de sorabilirsiniz "bir yöntemin doğru olmasını sağlayan kuralların kısa bir listesi var mı " Hayır yok. İplik güvenliği son derece karmaşık bir tür doğruluktan başka bir şey değildir.
Ayrıca, soruyu sormanız, iplik güvenliği hakkındaki temel yanlış anlaşılmanızı gösterir. İş parçacığı güvenliği, bir programın yerel özelliği değil küreseldir . Doğru olmanın bu kadar zor olmasının nedeni , tüm programın iş parçacığı davranışı hakkında tam bir bilgiye sahip olmanızdır. , güvenliğini sağlamak .
Yine örneğime bakın: her yöntem önemsizdir . Yöntemlerin birbiriyle "global" düzeyde etkileşime girmesini sağlayarak programın kilitlenmesini sağlar. Her yönteme bakamaz ve "güvenli" olarak kontrol edemezsiniz ve daha sonra tüm programın güvenli olmasını bekleyebilirsiniz, sonuç olarak yapabileceğinizden daha fazlası, çünkü eviniz de evin% 100 oyuk olmayan tuğlalarından yapılmıştır olmayan içi boş. Bir evin içi boşluğu, parçalarının özelliklerinin bir toplamı değil, her şeyin küresel bir özelliğidir.