1、线程是什么
一个线程就是一个 “执行流”。每个线程之间都可以按照顺序执行自己的代码,多个线程之间 “同时” 执行着多份代码。
举例说明:
假设一家公司要去银行办业务,既要进行财务转账,又要进行福利发放,还得进行缴纳社保。
如果只有 张三 一个职员,无法一个人处理这么多业务,会耗费非常长的时间。为了业务能更快更好的办理,张三 叫来了两个好朋友 李四 和 王五,三个人分别负责一个事情,这样子就可以在同一时间更好的处理多项业务。自此就有了三个执行流共同完成任务,但他们本质上都是为了办理同一家公司的业务。
此时,我们就把这种情况称为多线程,三个人分别是一个线程。将一个大任务分解成不同的小任务,交给不同的执行流执行。其中 张三 是主线程,因为 李四 和 王五 都是张三叫来的。
2、为什么要有线程
首先, “并发编程” 成为 “刚需”。
·单核 CPU 的发展遇到了瓶颈,想要提高算力,就需要多核 CPU。 而并发编程能更充分利 用多核 CPU 资源。
·有些任务场景需要 “等待IO” ,为了让 等待IO 的时间能去做一些其他工作,也需要用到并发 编程。
其次,虽然多进程也能实现 并发编程,但是线程比进程更轻量。
·创建线程比创建进程更快
·销毁线程比销毁进程更快
·调度线程比调度进程更快
3、线程和进程的区别
·进程是包含线程的。每个进程至少有一个线程存在,即主线程
·进程和进程之间不共享内存空间。同一个进程的线程之间共享一个内存空间
·进程是系统分配资源的最小单位,线程是系统调度的最小单位
·一个进程挂了不会影响到其他进程,但是一个线程挂了,可能把进程中的其他线程一起带走
4、Java中的线程 和 操作系统线程 的关系
线程是操作系统中的概念。操作系统内核实现了线程这样的机制,并且对用户层提供了一些API 供用户使用。(例如 Linux 中的 pthread 库)
Java 标准库中的 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装。