1. 什么是多线程编程
让顺序执行的没有依赖关系的操作,并行化。从而提高减少耗时。
2. java怎么启动一个线程去异步执行任务
- extends Thread类
- implements Runnable接口
- implements Callable接口(带返回值)
3. java线程生命周期,结合Thread线程的各个方法
running = 就绪(等待cpu时间片轮转)+运行(已拿到cpu资源)
终止一个线程的方法(不可以中断一个正在运行的线程):
stop();(被弃用)
interrupt();
4.java线程池概念
对于多线程编程,处理每个请求都要创建一个线程,这不仅要花费时间在创建线程的过程中,还会出现创建线程过多未释放导致的系统内存不足问题,因此引入线程池的概念。线程池,就是在一个容器中创建适量的线程,在程序访问的时候直接获取线程并使用
类似数据库连接池,没连接池时访问一次数据库便建立一个Connection,用完,连接释放,添加数据库连接池后,是连接先建立好或者使用时建立,用完,不释放,而是放在数据库连接池中,供下一次请求调用。
5. java怎么使用一个线程池去异步执行任务
- FixedThreadPool
- SingleThreadPool
- CachedThreadPool(按需分配,keppAliveTime不用则被终止)
- 使用ThreadPoolExecutor自定义线程池大小等参数信息。
6.java线程池实现流程
7.工具监控,查看当前运行的线程
JVisualVM
Jstack -l pid
8.线程池执行过程中线程抛出异常 会让线程挂掉吗?
- submit 方法提交任务 (线程不会挂,会直接吞掉异常,通过get()方法可重新抛出异常)
- execute方法提交任务(直接抛出异常,线程会挂掉,且会重新创建一个新线程代替挂掉的线程)
- 对此处仔细介绍的链接: http://ifeve.com/%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90java%E7%BA%BF%E7%A8%8B%E6%B1%A0%E7%9A%84%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86%E6%9C%BA%E5%88%B6/