"Merhaba Amigo! Dün çoklu okumanın faydalarını ve kolaylıklarını tartıştık. Şimdi dezavantajlarına bakma zamanı. Ve ne yazık ki bunlar küçük değiller."
Önceden, bir programa birbirinin metotlarını çağıran bir dizi nesne olarak bakmıştık. Şimdi her şey biraz daha karmaşık hale geliyor. Bir program daha çok, içinde gezinen ve yöntemlerde yer alan komutları yürüten birkaç "küçük robot" (thread) içeren bir nesneler kümesi gibidir.
Bu yeni yorum ilkini iptal etmez. Hâlâ nesnedirler ve hâlâ birbirlerinin yöntemlerini çağırırlar. Ancak birkaç iş parçacığı olduğunu ve her iş parçacığının kendi işini veya görevini yaptığını unutmamalıyız.
Bir program daha karmaşık hale geliyor. Farklı iş parçacıkları, gerçekleştirdikleri görevlere göre farklı nesnelerin durumunu değiştirir. Ve birbirlerinin ayak parmaklarına basabilirler.
Ancak en kötü şeyler Java makinesinin derinliklerinde olur. Daha önce de söylediğim gibi, iş parçacıklarının görünürdeki eşzamanlılığı, işlemcinin sürekli olarak bir iş parçacığından diğerine geçmesi gerçeğiyle elde edilir. Bir iş parçacığına geçer, 10 milisaniye çalışır, bir sonraki iş parçacığına geçer, 10 milisaniye çalışır, vb. Ve sorun burada yatıyor: Bu geçişler en uygunsuz anlarda gerçekleşebilir. Bu örneği göz önünde bulundurun:
İlk iş parçacığının kodu | İkinci iş parçacığının kodu |
---|---|
|
|
Görüntülenmesini beklediğimiz şey |
---|
Nick 15 yaşında Lena 21 yaşında |
Gerçek kod yürütme | İlk iş parçacığının kodu | İkinci iş parçacığının kodu |
---|---|---|
|
|
|
Gerçekte ne gösteriliyor |
---|
Nick Lena 15 21 yaşında _ |
Ve işte başka bir örnek:
kod | Tanım |
---|---|
|
Swap yöntemi, ve swap değişkenlerinin değerlerini değiştirir .name1 name2
Aynı anda iki iş parçacığından çağrılırsa ne olabilir? |
Gerçek kod yürütme | İlk iş parçacığının kodu | İkinci iş parçacığının kodu |
---|---|---|
|
|
|
Alt çizgi |
---|
Her iki değişken de «Lena» değerine sahiptir. «Ally» nesnesi bunu başaramadı. Kayıp. |
"Bu kadar basit bir atama işleminde bunun gibi hataların mümkün olduğunu kim tahmin edebilirdi ki?!"
"Evet, bu sorunun bir çözümü var. Ama bunu biraz sonra konuşacağız - boğazım kurudu."
GO TO FULL VERSION