java多线程总结
来源:互联网 发布:sqlserver insert语句 编辑:程序博客网 时间:2024/06/05 23:04
1. 实现线程有三种方法
继承Thread、实现Runnable、实现Callable,其中前两种没有返回值,最后一种有返回值(返回值为Future类型)。
2. 启动或执行线程有两种方法
(1) thread.start()
(a) 继承Thread,直接thread.start()
(b) 实现Runnable,先new Thread(Runnable),然后thread.start()
(c) 实现Callable,先new FutureTask(Callable),然后new Thread(Runnable),最后thread.start()
(2) ExecutorService.submit()
(a) 实现Callable有返回值,调用<T> Future<T> submit(Callable<T> task);
(b) 实现Runnable无返回值,调用Future<?> submit(Runnable task);
(c) 实现Runnable,如果也想要有返回值,调用<T> Future<T> submit(Runnable task, T result);
3. Runnable和Callable的相互转化
Runnable --> Callable(无返回值转有返回值): Executors.callable(Runnable); 或 Executors.callable(Runnable, T);
Callable--> Runnable (有返回值转无返回值): new FutureTask(Callable); (FutureTask实现了Runnable接口)
4. 返回值为Future类型有两个作用
(1) 返回线程执行结果:future.get(); 或 future.get(long timeout, TimeUnit unit);
(2) 操作线程状态:
(a) 判断线程是否已完成:future.isDone();
(b) 取消线程:future.cancel(true);
(c) 判断线程是否已取消:future.isCancelled();
所以,Runnable 也可以像Callable一样返回Future,Runnable返回的Future虽然没有返回值,但是仍然可以用来操作线程状态。
5. Executor、ExecutorService、AbstractExecutorService、ThreadPoolExecutor、Executors之间的关系
(1) Executor是线程调度的最高接口,ThreadPoolExecutor是最核心的最终实现,关系是:Executor --> ExecutorService --> AbstractExecutorService --> ThreadPoolExecutor
(2) Executors是一个线程调度工具类,包含了一些静态工具方法
6. Executors相关方法介绍
(1) 线程池工厂
(a) 固定大小的线程池,newFixedThreadPool(int) 没有达到指定数目以前,优先新建线程;达到指定数目以后,需要排队,队列不限长
(a.1) 单任务线程池,newSingleThreadExecutor() 创建一个单线程线程池,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行
(b) 带缓存的线程池,newCachedThreadPool() 优先使用线程池中的线程,不够时新建线程;线程池中初始线程数目为0;线程池中的线程在60秒未被使用就将被移除
(c) 支持任务调度的连接池,newScheduledThreadPool(int) 支持定时及周期性执行任务的连接池
(c.1) 单任务支持任务调度的连接池,newSingleThreadScheduledExecutor()
7. CompletionService
封装线程池,以更方便的获取线程的返回结果
[1] Java线程之CompletionService
[2] Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
8. ForkJoinPool
java中的另一种线程池实现,适用于可分治处理的任务
[3] java多线程之ForkJoinPool
[4] 线程及同步的性能 - 线程池/ThreadPoolExecutors/ForkJoinPool
- 【多线程】java多线程知识点总结
- java多线程使用总结
- Java多线程编程总结
- Java多线程编程总结
- Java多线程编程总结
- java多线程学习总结
- Java多线程编程总结
- Java多线程编程总结
- java多线程学习总结
- Java多线程编程总结
- Java多线程编程总结
- Java多线程编程总结
- Java多线程编程总结
- Java多线程编程总结
- Java多线程编程总结
- Java 多线程总结
- Java多线程编程总结
- Java多线程编程总结
- [置顶] 开发学习资源
- phpsession问题
- Java提高篇(二八)------TreeSet
- 抽象类(abstract class)和接口(interface)有什么异同?【Java面试题】
- h5区分手机QQApp上内置浏览器和QQ浏览器App
- java多线程总结
- spring事务配置,声明式事务管理和基于@Transactional注解的使用
- 2039-数据结构上机实验之二分查找
- Postman用法简介
- java提高篇(二九)-----Vector
- 《看透springMvc源代码分析与实践》笔记2常见协议和标准
- bootstrap左侧滑动菜单效果
- androidStudio无线连接真机调试应用
- Web 前端工具