线程的创建
public class MyThread2 extends Thread{
@Override
public void run() {
}
}
//thread 的创建与使用
MyThread2 myThread2 = new MyThread2();
myThread2.start();
线程池个数
int cores = Runtime.getRuntime().availableProcessors()*2;
ExecutorService executorService = Executors.newFixedThreadPool(cores );
线程池当量的连接
关闭线程池
private void closeExecutorService(ExecutorService executorService) {
if (executorService == null) {
return;
}
executorService.shutdown();
try {
if (!executorService.awaitTermination(30000, TimeUnit.MILLISECONDS)) {
executorService.shutdownNow();
}
} catch (InterruptedException e) {
executorService.shutdownNow();
}
}
FixedThreadPool-future
Map<String, Future<TableMetaData>> futureMap = new HashMap<>();
ExecutorService executorService = Executors.newFixedThreadPool(threadCount);
//for each start
Future<TableMetaData> future = executorService.submit(new Callable<TableMetaData>() {
@Override
public TableMetaData call() throws Exception {
return tableMetaDataLoader.load(tabName, shardingRule);
}
});
futureMap.put(each, future);
//for each end
//遍历Map里的future拿到真正的值
for (Map.Entry<String, Future<TableMetaData>> entry:futureMap.entrySet()) {
try {
result.put(entry.getKey(), entry.getValue().get());
} catch (final InterruptedException | ExecutionException ex) {
if (ex.getCause() instanceof SQLException) {
throw (SQLException) ex.getCause();
}
Thread.currentThread().interrupt();
}
}
closeExecutorService(executorService);
线程池的参考文章
Java线程池(ExecutorService)使用