正確的方法是在 IO 線程中實際執行邏輯,如果它是非阻塞的。否則,將請求委托給專用線程,如下所示:public class Example { public static void main(String[] args) { Undertow server = Undertow.builder() .addListener(8080, "localhost") .setHandler(new HttpHandler() { public void handleRequest(HttpServerExchange exchange) throws Exception { if (valueIsPresentInCache(exchange)) { getValueFromCache(); // non-blocking, can be done from IO thread } else { if (exchange.isInIoThread()) { exchange.dispatch(this); // we return immediately, otherwise this request will be // handled both in IO thread and a Worker thread, throwing // an exception return; } fetchValueFromDatabase(); // blocking!!! } } }) .build(); server.start(); }}
1 回答

瀟湘沐
TA貢獻1816條經驗 獲得超6個贊
屏幕和打印機是非常不同的媒體。在屏幕上,您通常具有大約 72 到 92 dpi(每英寸像素)的低分辨率。每個像素可以有大量的顏色(24m 或更多)。在打印機上,您通常具有高分辨率(高達 2540 dpi),但只有 2 (b/w) 到 6 種顏色。為了創建中間色,打印機將為您提供光柵化技術,例如半色調。
您創建BufferedImage 的方式嚴重偏向于屏幕輸出:低分辨率、使用中間顏色進行抗鋸齒等。結果會很差。此外,您的輸出意圖丟失了。打印機驅動程序只能看到像素圖。它不知道文本是否存在以及文本在哪里,也無法為其優化輸出。
為了提高質量,您主要有兩種選擇:
如果您只打印線條和文本,并且只使用打印機可以創建的顏色而不混合顏色,則可以創建一個與打印機分辨率和顏色完全匹配的BufferedImage 。那應該給你一個體面的質量。
否則,直接繪制到Printable。然后保留輸出操作的意圖,打印驅動程序可以產生最佳質量。我敢肯定,只要稍作思考,您就可以重構您的代碼,使您仍然擁有一個非常易于維護的結構。
添加回答
舉報
0/150
提交
取消