使用Netbeans並編寫任意REST端點時,NetBeans始終顯示警告,表明該方法可以轉換爲異步。Java EE中應該每個REST端點都是異步的嗎?
例如,我創建以下方法:
@GET
@Path("/test")
public String hello() {
return "Hello World!";
}
的NetBeans然後顯示一個警告,見下文:
點擊工具提示生成此代碼:
private final ExecutorService executorService = java.util.concurrent.Executors.newCachedThreadPool();
@GET
@Path(value = "/test")
public void hello(@Suspended final AsyncResponse asyncResponse) {
executorService.submit(new Runnable() {
@Override
public void run() {
asyncResponse.resume(doHello());
}
});
}
private String doHello() {
return "Hello World!";
}
創建PUT時同樣如此或POST方法。由於在實現REST端點時NetBeans總是顯示警告,這告訴我編寫同步端點被認爲是錯誤/不正確的做法。那麼,每個REST端點應該是異步的嗎?爲什麼?
會發生什麼,如果兩個用戶請求同時訪問相同的資源? –
據我所知,服務器的線程池中有多個線程可用。每當有新的請求進入時,服務器都會將其中一個線程分配給該請求,並在處理完請求(不管訪問哪個資源)後將線程釋放到池中。這也意味着默認情況下JAX-RS是線程安全的。 – Jakob
什麼是您的netbeans版本? – user7294900