思路:一个请求创建一个线程
Message消息体
package com.dwz.concurrency2.chapter16;
public class Message {
private final String value;
public Message(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
handler简单版(有几个请求创建一个线程)
package com.dwz.concurrency2.chapter16;
import java.util.Random;
public class MessageHandler {
private final static Random random = new Random(System.currentTimeMillis());
public void request(Message message) {
new Thread(() -> {
String value = message.getValue();
try {
Thread.sleep(random.nextInt(1000));
System.out.println("The message will be handle by " + Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
handler改进版(使用线程池创建线程)
package com.dwz.concurrency2.chapter16;
import java.util.Random;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MessageHandler {
private final static Random random = new Random(System.currentTimeMillis());
private final static Executor executor = Executors.newFixedThreadPool(5);
public void request(Message message) {
executor.execute(() -> {
String value = message.getValue();
try {
Thread.sleep(random.nextInt(1000));
System.out.println("The message will be handle by " + Thread.currentThread().getName() + " " + value);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
public void shutdown() {
((ExecutorService) executor).shutdown();
}
}
测试
package com.dwz.concurrency2.chapter16;
import java.util.stream.IntStream;
public class PerThreadClient {
public static void main(String[] args) {
final MessageHandler handler = new MessageHandler();
IntStream.rangeClosed(0, 10).forEach(i -> handler.request(new Message(String.valueOf(i))));
handler.shutdown();
}
}
来源:https://www.cnblogs.com/zheaven/p/12164222.html