持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天
线程实现
1.多任务
现实中太多这样同时做多件事情的例子了,看起来是多个任务都在做,其实本质上我们的大脑在同一时间依旧只做了一件事情。
2.多线程
原来是一条路,慢慢因为车太多了,道路阻塞,效率极低。为了提高使用的效率,能够充分利用道路,于是加了多个车道。从此,妈妈再也不用担心道路阻塞了。
3.Thread和Proccess
thread: 线;细线,线状物;思路,贯穿的主线;(互联网留言板上的)同主题帖子,系列相关帖子;少量,较低水平;螺纹;<英,旧> 衣服;(计算机)线程,调度单位
prcocess: 步骤,程序;(自然或偶然的)变化过程;(为达到某目标的)过程,进程;制作方法,加工方法;<法律>传票;(生,剖)端突,突起
- 说起进程,就不得不说下程序。程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
- 而进程则是执行程序的依次执行过程,它是一个动态的概念。是系统资源分配的单位。
- 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位
注意: 很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的很快,所以就有同时执行的错局。
4.核心概念
-
线程就是独立的执行路径
-
在程序运行时,即使没有自己创建线程,后台也会有多个线程,比如主线程,GC线程
-
main()称之为主线程,为系统的入口,用于执行整个程序
-
在一个进程中,如果开辟了多个线程,线程的运行是由调度器(cpu)安排调度的,调度器是与操作系统紧密相关的,先后顺序是不能人为干预的
-
对同一份资源操作时mm会存在资源抢夺的问题,需要加入并发控制
-
线程会带来额外的开销,如CPU调度时间,并发控制开销
-
每个线程在自己的工作内存交互,内存控制不当会造成数据不一致
代码
public class TestTread1 extends Thread { @Override public void run() { //run方法线程体 for (int i = 0; i < 20; i++) { System.out.println("我在看代码。。。"); } } //main线程,主线程 public static void main(String[] args) { //创建一个线程对象 TestTread1 testTread1 = new TestTread1(); //调用start方法开启线程 testTread1.start(); for (int i = 0; i < 1000; i++) { System.out.println("我在学习多线程。。。"); } } }
总结
了解线程和进程的区别