Java并发之执行器和线程池
来源:互联网 发布:淘宝平拍裤子褶皱手法 编辑:程序博客网 时间:2024/05/29 19:19
执行器Executor
用来管理Thread对象,简化并发编程
Executor的子接口是ExecutorService
ExecutorService的实现类实际上就是线程池
简单的例子:
ExecutorService executorService = Executors.newFixedThreadPool(4);executorService.execute(new Runnable() { public void run() { System.out.println(Thread.currentThread().getName()); }});executorService.shutdown();
ExecutorService实现类
ThreadPoolExecutor
ScheduledThreadPoolExecutor
创建ExecutorService
Executors工厂类来创建:
ExecutorService executorService1 = Executors.newSingleThreadExecutor();ExecutorService executorService2 = Executors.newFixedThreadPool(10);ExecutorService executorService3 = Executors.newScheduledThreadPool(10);
使用ExecutorService
execute(Runnable):执行Runnable
submit(Runnable):执行Runnable,返回Future,这个Future可以用来检查Runnable是否已经执行完毕。
submit(Callable):执行Callable,返回Future,这里的Future可以获得Callable的返回数据。
Future和Callable
Callable:和Runnable接口很类似。此接口有一个call()方法。在这个方法中,实现任务逻辑并返回一个结果。
Future:表示一个任务的生命周期,判断任务是否完成,获取Callable任务的返回结果。
ExecutorService executorService = Executors.newFixedThreadPool(1);Callable<Integer> task = ()->{ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return 5;//返回5};Future<Integer> future = executorService.submit(task);Integer result = future.get();System.out.println(result);
ExecutorService关闭
shutdown():并不会立即关闭,但它将不再接受新的任务,而且一旦所有线程都完成了当前任务的时候, ExecutorService 将会关闭。
shutdownNow():立即停止所有执行中的任务,并忽略掉那些已提交但尚未开始处理的任务。无法保证正在执行的任务的正确性。
线程池
ThreadPoolExecutor是ExecutorService接口的一个实现。
一般我们可以用Executors工厂类来创建线程池,其用法和上面的讲的例子一样。
同时我们也可以使用ThreadPoolExecutor的构造方法
ExecutorService threadPoolExecutor = new ThreadPoolExecutor( corePoolSize, maxPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>() );
阅读全文
0 0
- Java并发之执行器和线程池
- java并发编程之线程执行器
- java并发 -线程池,任务执行
- 【Java】并发之线程池
- 【Java】并发之线程池
- java并发之线程池
- Java线程并发库之线程池
- Java 并发包之线程池和原子计数
- Java并发编程之线程池、Callable和Future使用
- java并发编程之进程和线程
- Java并发(九)Condition和线程顺序执行
- Java 8并发教程:线程和执行程序
- Java并发编程:线程的创建和执行
- (十七)java并发编程--任务执行之线程池的使用
- Java并发之线程
- Java并发之线程
- Java 多线程、并发系列之线程定义和线程状态
- Java并发编程之四:守护线程和线程阻塞
- Centos7下利用convoy+nfs实现container之间的共享存储
- C 数据结构 笔记(一) —— 顺序表
- Windows下安装Tensorflow(GPU)
- Etcd,Zookeeper,Consul 比较
- 蓝桥杯ALGO-92前缀表达式
- Java并发之执行器和线程池
- 从对象创建和引用小议解耦
- tensorflow API:tf.argmin
- ETL工具kettle与JAVA结合使用程序生成转换
- Unable to instantiate activity ComponentInfo on path: DexPathList
- Apache.NMS.dll引用过程中的问题
- 空间中任一点到超平面的距离公式的推导过程
- golang fmt格式“占位符”
- cglib中proxy动态代理解析