2009-05-19 22 views
7

numaralı telefonu tamamlamasını beklemiyorum. Bir iş parçacığının statik aramadan çıkmasını ve iş parçacığının bitmesini beklemek için bir yol bulmam gerekiyor. Temel olarak, bir "ateş ve unut" yaklaşımı. Birisi bana bunun nasıl başarılabileceğine dair basit bir örnek verebilir mi?Java, Bir iş parçacığının

+3

Temel olarak bir iş parçacığının varsayılan davranışı - bu iş parçacığı bir iş parçacığı iletmek veya paylaşılan bir değişkenin durumunu değiştirmek için gerekecek mi? Daha fazla detay güzel olurdu. – Gandalf

cevap

26
Thread t = new Thread(new YourClassThatImplementsRunnable()); 
t.start(); 

// JDK 8 
new Thread(() -> methodYouWantToRun()).start(); 
7
public static void foo() { 
    new Thread() { 
     public void run() { 
        //do something here.... 
     } 
    }.start(); 
} 
+2

Ancak, görev göreceli olarak basitse, iş parçacığı için İşlenebilir yapıcıyı kullanın (yani, yeni iş parçacığı (yeni Runnable() {public void run() {...}}), Karmaşık sınıf, ancak bayt kodunda daha basit olması gereken bir arabirimin uygulanması ve Thread'deki yöntemlerle herhangi bir ad çakışması olmayacak. – Gracenotes

2

temelde açtığınızda, gerekli katılmak gerçekleştirmek yok. Böylece iş parçacığının bitmesini beklemeyeceksiniz. o kısa ömürlü ise

new Thread(new yourLongRunningProcessThatImplementsRunnable()).start(); 

: uygulamanızda kendisine benzer bir yaşam döngüsü vardır, uzun ömürlü dişli, ve diğer iş parçacığı üzerinde bekleyen onun çok fazla zaman harcama olacak ise

5

senin görevin niteliğine bağlı olarak, farklı yolları approrpiate çekebilir:

(1) birçok söylediğim gibi arada bir görev için ortak bir şekilde) ( bir dişliyi ve başlangıç ​​çağrı basitçe etmektir yöntem.

(2) Arka plan diziniz durmazsa, varsayılan olarak diğer iş parçacıkları bittiğinde programınızın kapanmasını engelleyeceğini unutmayın. Bu nedenle , bu davranışa sahip olmamak için iş parçacığındaki setDaemon (true) öğesini çağırmak isteyebilirsiniz. (Kapatılmakta bir temiz yolu GUI tabanlı uygulamalarda, diğer taraftan, genellikle zaten) kadar sadece System.exit (çağırarak sona ve ideal size uzun süren bir görev haline buile ederim.)

(3) sık sık "yangın ve unut" için kısa ömürlü görevler varsa, daha sonra Java 5'ten itibaren kullanılabilir olan Executors framework kullanmayı düşünün.

+0

Bu harika, teşekkürler. – eric2323223

İlgili konular