Java▲java开发基础 多线程


Java▲java开发基础 多线程
文章图片
Java▲java开发基础 多线程
文章图片
Java▲java开发基础 多线程
文章图片
Java▲java开发基础 多线程
文章图片
Java▲java开发基础 多线程
面试三大问题:hashMap , 多线程 , jvm前面我们了解了hashMap , 今天简单了解一下多线程
01_什么是多线程?
1.什么是线程 ?
线程是程序执行的一条路径 一个进程中可以包含多条线程
多线程并发执行可以提高程序的效率 可以同时完成多项工作
2.多线程的应用场景
迅雷开启多条线程一起下载
QQ同时和多个人一起视频
3.解释
QQ(进程)有多个功能模块(线程)
视频聊天(线程)
语音聊天
文字聊天
如果想让多个功能模块同时运行那么就必须要用到多线程
4.在java开发中什么时候需要用到多线程
a:IO流操作
b:网络编程
c:数据库操作
...
只要是耗时操作都用多线程
02_线程的五种状态
线程创建5个状态:新建就绪运行阻塞死亡当线程创建时
03_多线程并行和并发的区别
【Java▲java开发基础 多线程】并行
两个任务同时运行 , 就是甲任务进行的同时 , 乙任务也在进行 。 (需要多核CPU)
并发
指两个任务都请求运行 , 而处理器只能按受一个任务 , 就把这两个任务安排轮流进行 , 由于
时间间隔较短 , 使人感觉两个任务都在运行 。
04_线程创建三种方式

  1. 继承Thread类

好处是:  可以直接使用Thread类中的方法代码简单
弊端是:  如果已经有了父类就不能用这种方法
  1. 实现Runnable接口

好处是:  即使自己定义的线程类有了父类也没关系因为有了父类也可以实现接口而且接口是可以多实现的 , 从而可以多个线程共享一个目标对象 , 很适合多线程处理同一个资源
弊端是:   不能直接使用Thread中的方法需要先获取到线程对象后才能得到Thread的方法代码复杂
  1. 实现Callable接口

优点: 通过get方法可以拿到返回的对象 , 从而知道该方法的运行结果
缺点: 代码会稍微复杂一点
  1. 使用线程池例如用Executor框架

Executor接口中定义了方法execute(Runnable command) , 用来接收Runable实例ExecutorService接口继承自Executor接口 , 它提供了更丰富的实现多线程的方法 , 比如 , ExecutorService提供了关闭自己的方法 , 以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法 。可以调用ExecutorService的shutdown()方法来平滑地关闭 ExecutorService , 调用该方法后 , 将导致ExecutorService停止接受任何新的任务且等待已经提交的任务执行完成(已经提交的任务会分两类:一类是已经在执行的 , 另一类是还没有开始执行的) , 当所有已经提交的任务执行完毕后将会关闭ExecutorService 。 因此我们一般用该接口来实现和管理多线程 。