package internet;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.concurrent.*;
public class PooledWeblog {
public final static int THREAD_COUNT = 4;// 线程数量
private static class LogEntry{
String original;
Future<String> future;
LogEntry(String original, Future<String> future){
this.original = original;
this.future = future;
}
}
public static void main(String[] args) throws IOException {
ExecutorService pool = Executors.newFixedThreadPool(THREAD_COUNT);
Queue<LogEntry> results = new LinkedList<LogEntry>();
try (BufferedReader in = new BufferedReader(
new InputStreamReader(
new FileInputStream(args[0]), "UTF-8"));){
for (String entry = in.readLine(); entry != null; entry = in.readLine()) {
LookupTask task = new LookupTask(entry);
Future<String> future = pool.submit(task);
LogEntry result = new LogEntry(entry, future);
results.add(result);
}
}
//开始打印结果,每次结果未准备就绪时就会阻塞
for (LogEntry result : results){
try {
System.out.println(result.future.get());
}catch (InterruptedException | ExecutionException e) {
System.out.println(result.original);
}
}
// 关闭线程池
pool.shutdown();
}
}
class LookupTask implements Callable<String> {
private String line;
public LookupTask(String line) {
this.line = line;
}
@Override
public String call() throws Exception {
try {
// 分解IP地址
int index = line.indexOf(" - - ");
String address = line.substring(0, index);
String content = line.substring(index);
String hostname = InetAddress.getByName(address).getHostName();
return hostname + content;
}catch (Exception ex) {
return line;
}
}
}
运行结果: