1

なんらかの理由でブロックするJavaのメソッドを呼び出したい。メソッドをX分間待ってから、そのメソッドを停止したいと思います。

StackOverflowで1つのソリューションを読んだので、最初のクイックスタートができました。私はここにそれを書いています:-

ExecutorService executor = Executors.newCachedThreadPool();
    Callable<Object> task = new Callable<Object>() {
       public Object call() {
          return something.blockingMethod();
       }
    };
    Future<Object> future = executor.submit(task);
    try {
       Object result = future.get(5, TimeUnit.SECONDS); 
    } catch (TimeoutException ex) {
       // handle the timeout
    } catch (InterruptedException e) {
       // handle the interrupts
    } catch (ExecutionException e) {
       // handle other exceptions
    } finally {
       future.cancel(); // may or may not desire this
    }

しかし今、私の問題は、私の関数がいくつかの例外をスローする可能性があることです。これをキャッチして、それに応じていくつかのタスクを実行する必要があります。したがって、コードで関数blockingMethod()がいくつかの例外をスローする場合、Outerクラスでそれらをキャッチするにはどうすればよいですか?

4

4 に答える 4

4

あなたはあなたが提供するコードでそれをするためにすべてをセットアップしました。交換するだけ

// handle other exceptions

例外処理を使用します。
あなたがあなたの特定のものを手に入れる必要があるならば、あなたExceptionはそれを手に入れます:

Throwable t = e.getCause();

そして、例外を区別するために、次のようにすることができます。

if (t instanceof MyException1) {
  ...
} else if (t instanceof MyException2) {
  ...
...
于 2012-07-06T13:14:20.027 に答える
1

ExecutionExceptionキャッチブロック内:e.getCause()

https://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html#getCause

于 2012-07-06T13:14:27.493 に答える
1

ExecutionExceptionインスタンスでは、私は推測しcauseます。

于 2012-07-06T13:11:57.650 に答える
-1

thread.sleep(xミリ秒)はスレッドをxミリ秒停止し、その後再開します。もう1つの方法は、thread.wait(x)(xのタイムアウト値を指定)を呼び出してから、thread.notify()を呼び出して、スリープ状態のスレッドを「ウェイクアップ」することです。

于 2012-07-06T13:14:59.660 に答える