- 目的:就是每來一個請求, 為這個請求建立一個線程來執行此請求。進而保證程式不會被堵塞。
public class Message {
private final String data;
public Message(String data) {
this.data = data;
}
public String getData() {
return data;
}
}
/**
* 當任務請求的時候, 開辟線程執行任務; 保證程式不會因為執行任務, 而阻塞.
*/
public class MessageHandler {
private final Random random = new Random(System.currentTimeMillis());
private final Executor executor = Executors.newFixedThreadPool(5);
public void request(Message message) { executor.execute(() -> {
String data = message.getData();
System.out.println(Thread.currentThread().getName() + " :: " + data);
try {
Thread.sleep(random.nextInt(100));
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
// 關閉線程池
public void shutDown() {
((ExecutorService)executor).shutdown();
}
}
public class MessageHandlerDemo {
public static void main(String[] args) {
MessageHandler handler = new MessageHandler();
IntStream.rangeClosed(1, 10).forEach(i -> {
handler.request(new Message(String.valueOf(i)));
});
System.out.println("關閉線程池");
// 不會立即關閉線程池, 而是等待線程池中的任務執行完成.
handler.shutDown();
}
}