0
    public class Threadz implements Callable<String>{
    private boolean flag = false;

    @Override
    public String call() throws Exception {
        // TODO Auto-generated method stub
        for(int i = 0; i < 3; i++){
            Thread.sleep(2000);
        }
        flag = true;
        return "Done";
    }

    public boolean isDone(){
        return flag;
    }
}

    public class MyMain {
    public static void main(String[] args) {
        ExecutorService exe = Executors.newSingleThreadExecutor();
        Threadz threadz = new Threadz();
        Callable<String> cthread = threadz;
        Future<String> fut = exe.submit(cthread);

        while(true){
            try {
                if(!threadz.isDone())
                    System.out.println("Do something while waiting...");
                else{
                    System.out.println(fut.get());
                    System.out.print("Do something with the result...");
                    break;
                }
                Thread.sleep(1000);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

上記のコードでの私の目標は、結果を返すスレッドを生成することですが、結果を待っている間、呼び出し元のスレッドを一時停止しないでください。これは実際に機能しますが、これを正しく行っていますか? これを行う適切な方法はありますか?また、結果を返した後、呼び出し可能なスレッドは自動的に終了しますか (リソースとメモリを解放します)?

ありがとう。

4

1 に答える 1

1
String callbackReturn = threadz.get();

必要に応じて計算が完了するまで待機し、その結果を取得します。

        ExecutorService exe = Executors.newSingleThreadExecutor();
        Threadz threadz = new Threadz();
        Callable<String> cthread = threadz;
        Future<String> fut = exe.submit(cthread);
        String callbackReturn = threadz.get();

現在のスレッドはここで待機します。一時停止したくない場合は、それを処理して他のスレッドにします。

于 2012-08-28T06:38:19.930 に答える