2011-08-29 7 views
5

Uygulamamıza groovy-shell-server eklemek istiyorum. Son zamanlarda, dahili bir API'ye yapılan bir çağrının teşhisi hızlandırdığı ve hatta kısa vadeli bir düzeltmeyi sağlayabileceği birkaç üretim konusuyla karşılaştık. Groovy-shell-server bunu başarmanın güzel bir yoludur.Bir kaçak GroovyShell sunucu iş parçacığı üzerinde Thread.stop çağırmak için çok riskli mi?

Ama aslında üretimde bu kullanarak potansiyel bir komplikasyon tanıtır. Dikkatli bir akran incelemesine rağmen, CPU'yu sabitleyen veya sonsuz bir döngüde sıkışan bir betik uygulayalım. O ipi öldürmenin bir yoluna ihtiyacım var, pronto! Bu yüzden groovy-shell-server'ı çalıştıran Groovy istemci iş parçacığının isteğe bağlı bir sabit durağını() desteklemek için düşünüyordum.

biliyorum Thread.stop() is inherently unsafe olduğunu; discussed on StackOverflow before oldu. Sorum şu: Sizce faydalar bu davadaki risklerden daha ağır basabilir mi? Bir kaçak GroovyShell sunucu iş parçacığı için bir tür "acil durum fren" olarak Thread.stop() pragmatik bir seçim mi kullanıyorsunuz? Ya da tutarsız bir durumda nesneleri bırakma olasılığı çok mu yüksek?

(birisi bir çalışan java uygulamasına programatik, interruptible erişim sağlamak için daha iyi bir yol var, bunun yerine, dinliyorum.)

cevap

4

Genellikle kullanımdan kaldırıldı kullanmak için kötü olduğunu düşünüyorum API ve özellikle Thread.stop()'u kullanmanız önerilmez.

AMA istisnasız orada kural değildir. Bence bu durum böyle. Benim deneyimime göre Thread.stop() çalışır ve gerçekten iş parçacığı durur. Netscape için hedeflenen uygulamada uzun yıllar önce kullandım. Bazı sürümleri de Thread.interrupt() desteklemiyordu. Düşündüğüm

tek alternatif çözüm ayrı bir işlem kullanıyor. Ancak bu durumda veri aktarımı için bazı süreç-süreç taşımacılığı uygulamak zorunda. Görevinizin ayrıntılarını bilmiyorum ama genellikle fiyat çok yüksek. Yerinde olsam

Yani, özür dilemek çok büyük yorum ile Thread.stop() kullanmayı tercih ediyorum.

+0

Ben aslında gerçekten iplik durur olsun veya olmasın Thread.stop() çıkılmamakla değilim - kesinlikle olacak. Soru, kötü bir durumda çeşitli nesneler bırakma potansiyeli nedeniyle ipliği durdurmak için çok * riskli * olup olmadığıdır. Genel olarak, size katılıyorum diye düşünüyorum, bunun muhtemelen faydaların riskleri aştığı bir durumdur. – greghmerrill

+1

@greghmerrill * Thread.stop() iş parçacığını gerçekten durduracak - kesinlikle olacak. *, Mutlaka bir monitörde bekleyen iş parçacığı durdurulmayabilir (yani, iş parçacığını 1 numaralı kilidi kilitlemelisiniz). 'Thread.stop()', * eğer kullanabileceğinizi, yığın izlerini inceleyip bazı tehlikeli anları işaretleyebileceğinizi bilmeniz durumunda * neredeyse * tamam. Alternatif olarak, kodları biberleyen ve 'Thread.interrupt()' işlevini kontrol eden veya ThreadDeath benzeri bir hatayı atmak için başka herhangi bir statik * güvenli noktaya * işaret eden bir kod geliştirici kullanın. – bestsss

+0

@bestsss _not mutlaka bir monitörde bekleyen iş parçacığı durdurulamayabilir (yani ikinciyi kilitlemek için 1 numarayı kilitlemelisiniz) _ - bu bana haber oldu, bahşiş için teşekkürler! Ben [denedim] (https://gist.github.com/1183567) ve kesinlikle haklısınız, bir kilit edinen bir iş parçacığı durduracak. Edinilen. – greghmerrill

İlgili konular