多线程基础
- 一.线程的概念
- 二.为什么要有线程
- 三.进程和线程的区别和关系
- 四.JAVA的线程和操作系统线程的关系
- 五.第一个多线程程序
- 1.继承Thread类
一.线程的概念
一个线程就是一个 “执行流”. 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 “同时” 执行着多份代码
同时,线程保证了独立的调度执行,而且也省去了资源的开销.
二.为什么要有线程
首先, “并发编程” 成为 “刚需”.
单核 CPU 的发展遇到了瓶颈. 要想提高算力, 就需要多核 CPU. 而并发编程能更充分利用多核 CPU资源.有些任务场景需要 “等待 IO”, 为了让等待 IO 的时间能够去做一些其他的工作, 也需要用到并发编
程.
其次, 虽然多进程也能实现 并发编程, 但是线程比进程更轻量.创建线程比创建进程更快.销毁线程比销毁进程更快.调度线程比调度进程更快.
最后, 线程虽然比进程轻量, 但是人们还不满足, 于是又有了 “线程池”(ThreadPool) 和 “协程”(Coroutine)
三.进程和线程的区别和关系
1.进程至少包含一个线程
2.每个线程,是一个独立的执行流,它有独立执行的能力,同时也省去了分配资源和释放资源的开销,单独的参与到CPU的调度中(状态.上下文.优先级,记账信息等)
3.每个进程都有自己的资源,线程之间共用这些资源
4.线程并不是越多越好,有时候会降低效率.
5.同一个进程中的线程之间,可能会互相干扰.造成线程安全问题.
6.进程之间不会相互影响,但是线程和线程之间,如果某一个线程抛出异常,可能会对其他的线程造成影响,将整个进程中的全部线程中止.
四.JAVA的线程和操作系统线程的关系
线程是操作系统中的概念. 操作系统内核实现了线程这样的机制, 并且对用户层提供了一些 API 供用户使用(例如 Linux 的 pthread 库).Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装
五.第一个多线程程序
1.继承Thread类