當我打電話這樣的方法:確實@Asynchronous有超時
@Asynchronous
public void cantstopme() {
for(;;);
}
難道永遠運行下去或將應用程序服務器一定時間後殺呢?
當我打電話這樣的方法:確實@Asynchronous有超時
@Asynchronous
public void cantstopme() {
for(;;);
}
難道永遠運行下去或將應用程序服務器一定時間後殺呢?
每當任何人調用註釋爲@Asynchronous
的方法時,它將立即返回,無論該方法實際需要多長時間。
每次調用都應返回一個Future
對象,該對象基本上是空的,並且稍後會在相關方法調用實際完成時由容器填充其值。
例如:
@Asynchronous
public Future<String> cantstopme() {
}
,然後調用這樣說:
final Future<String> request = cantstopme();
,以後你可以使用的Future.get()方法與特定的超時,即要求結果:
request.get(10, TimeUnit.SECONDS);
此代碼將永久運行。 AS或獨立應用程序,如果運行代碼不是被設計爲中斷的,Java沒有合法的方法來中斷一個線程。
Java可能沒有它,但也許EJB容器呢..? –
它不是強制返回Future對象。這也可能是一個無效的方法。區別在於,返回void的異步方法不能聲明應用程序異常。 http://docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html – user1807337