ScheduledThreadPoolExecutor
深入理解Java线程池:ScheduledThreadPoolExecutor
好的博客:https://www.cnblogs.com/liuzhihu/p/8177787.html
线程实现的三种方式:
/**
* ①继承Thread类
*/
@Test
public void newThread() {
MyThread myThread = new MyThread();
myThread.run();
System.out.println("运行结束");
}
/**
* ②实现Runnable接口
*/
@Test
public void newRunnable() {
LogRunnable runnable = new LogRunnable("hehehe");
Thread myThread = new Thread(runnable);
myThread.start();
System.out.println("运行结束!");
}
/**
* ③使用线程池
*/
@Test
public void excuteTask() {
// 创建线程池 (线程IO 6秒,(四核测试数据:delay 10毫秒(1w 60s 10W 600秒);delay 6秒(1w 66s 10W
// 606秒)))
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(100);
ExecutorService executorService = Executors.newFixedThreadPool(4);
List<String> logList = new ArrayList<>();
logList.add("first");
logList.add("second");
logList.add("three");
// foreach
logList.stream().forEach(vo -> {
scheduledThreadPool.schedule(new LogRunnable(vo), new Random().nextInt(10) + 5, TimeUnit.SECONDS);
});
// 关闭线程池
scheduledThreadPool.shutdown();
// Blocks until all tasks have completed execution after a shutdown
// request, or the timeout occurs, or the current thread is
// interrupted, whichever happens first.
try {
scheduledThreadPool.awaitTermination(8, TimeUnit.HOURS);
} catch (Exception e) {
}
}
class MyThread extends Thread {
@Override
public void run() {
super.run();
System.out.println("haha");
}
}
class LogRunnable implements Runnable {
private String str;
public LogRunnable(String str) {
super();
this.str = str;
}
@Override
public void run() {
System.out.println(this.str);
}
}
Last updated
Was this helpful?