jdk1.8新增线程池(WorkStealingPool)
/**
- 线程池
- 1.固定个数的线程池
- 2.缓存线程池,开始线程数0
-
如果需要线程,当前线程池没有,那么创建线程池
-
如果需要线程,线程池中有没有使用的线程,那么使用已经存在的线程
-
如果线程池中线程超过60秒(默认)没有使用,那么该线程停止
- 3.只有1个线程的线程池
-
保证线程执行的先后顺序
- 4.ScheduledPool
-
和DelayedQueue类似,定时执行
- 5.WorkStealingPool(任务窃取,都是守护线程)
-
每个线程都有要处理的队列中的任务,如果其中的线程完成自己队列中的任务,
-
那么它可以去其他线程中获取其他线程的任务去执行
*/
其他常见线程池参考======》
链接: https://blog.csdn.net/smile_Running/article/details/91409942?utm_source=app
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
package com.neutron.t23;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class T242WorkStealingPool {
/*
4
1000:ForkJoinPool-1-worker-1
1000:ForkJoinPool-1-worker-0
2000:ForkJoinPool-1-worker-2
3000:ForkJoinPool-1-worker-3
2000:ForkJoinPool-1-worker-1
public static ExecutorService newWorkStealingPool() {
return new ForkJoinPool
(Runtime.getRuntime().availableProcessors(),
ForkJoinPool.defaultForkJoinWorkerThreadFactory,
null, true);
}
*/
public static void main(String[] args) throws IOException {
// 根据cpu是几核来开启几个线程
ExecutorService service = Executors.newWorkStealingPool();
// 查看当前计算机是几核
System.out.println(Runtime.getRuntime().availableProcessors());
service.execute(new R(1000));
service.execute(new R(2000));
service.execute(new R(3000));
service.execute(new R(1000));
service.execute(new R(2000));
// WorkStealing是精灵线程(守护线程、后台线程),主线程不阻塞,看不到输出。
// 虚拟机不停止,守护线程不停止
System.in.read();
}
static class R implements Runnable {
int time;
public R(int time) {
this.time = time;
}
@Override
public void run() {
try {
TimeUnit.MILLISECONDS.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(time + ":" + Thread.currentThread().getName());
}
}
}