2010-03-13 77 views

回答

5

只需創建一個classextends Thread

public class Task extends Thread { 
    public void run() { 
     // ... 
    } 
} 

和如下創建:

Task task = new Task(); 

通常的做法然而,實施Runnable

public class Task implements Runnable { 
    public void run() { 
     // ... 
    } 
} 

或者,如果你想有一個Thread它返回一個結果,實施Callable<T>哪裏T代表返回類型。

public class Task implements Callable<String> { 
    public String call() { 
     // ... 
     return "string"; 
    } 
} 

兩者都可以使用ExecutorService執行。

+0

該死的,我輸入太慢...... – Smalltown2k 2010-03-13 22:59:13

+0

不要繼承Thread。實現可運行。 – Thilo 2010-03-14 01:44:38

+0

這確實是一個更好的做法,或者甚至可以'Callable ''如果你想要一個結果。然而這不是他的問題。 – BalusC 2010-03-14 01:46:57

1

您可以變通傳遞參數或設置全局可見的屬性,例如:

class Foo 
{ 
    public static String baz = "baz"; 
    private String bar = "bar"; 

    void startThread() 
    { 
    MyThread thread = new MyThread(bar); 

    thread.start(); 
    } 
} 

class MyThread extends Thread 
{ 
    String ref; 

    MyThread(String ref) 
    { 
    this.ref = ref; 
    } 

    public void run() 
    { 
    // it can work with passed parameter 
    System.out.println(ref); 

    // but also with globally visible variables 
    System.out.println(Foo.baz); 
    } 
} 
4

我不會創建可擴展條條的類。它更可能是你有一個實現Runnable,並提供私有數據成員訪問的類:

public class YourTask implements Runnable 
{ 
    private ResultClass result; 

    public void run() { } 

    public ResultClass getResult() { return result; } 
} 

看一看的java.util.concurrent包和新FutureTask。我認爲這是一個更好的選擇。

+1

如果要返回結果,還應考慮Callable而不是Runnable。 – Thilo 2010-03-14 01:45:12

相關問題