什么是线程和进程?
「这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战」。
进程是程序的一次执行过程,是系统运行的基本单位
线程是比进程更小的执行单位
一个进程在执行过程中可以有多个线程
简单说:进程是对资源的管理和分配的单位,线程是资源的调度的基本单位。
请简要描述线程与进程的关系,区别及优缺点?
从JVM的角度说一下线程和进程的关系:
线程是进程划分更小的运行单位,线程是独立的而进程不一定;
线程开销小但不利于资源的管理和保护,而进程正相反
程序计数器为什么是私有的?
作用:线程切换后能恢复到正确的执行位置
虚拟机栈和本地方法栈为什么是私有的?
作用:保证线程中的局部变量不被别的线程访问到
在JVM中,只有方法去和堆内存是线程共享的,其他都是线程私有的。
方法区主要用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
说说并发与并行的区别?
并发:是指多个事情在同一个时间段中执行
并行:是指多个事情在同一时刻执行
为什么使用多线程?
开销小,适应时代的发展,可以实现多核多线程,减少了线程上下文切换的开销
使用多线程可能带来什么问题?
内存泄漏、上下文切换、死锁还有受限于硬件和软件的资源闲置问题
说说线程的生命周期和状态?
- new
- runnable(running <---> ready)
- blocked
- waiting
- time_waiting
- terminated
详情请看:点击
什么是上下文切换?
cpu只能在任意时刻被一个线程使用,为了雨露均沾,cpu为每个线程分配时间片,当时间片用完后。线程就会重新处于一个就绪状态,让其他线程使用,这就属于上下文切换,如果增加了cpu核心数,则大大减少了上下文的切换时间。
为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?
run方法只是普通方法,执行是按照main方法中的调用函数执行的,但是使用start方法时会使得线程进入就绪状态,只要分配到时间片,则就可以马上执行run方法中的内容,相比于run方法的执行,start方法中间多了创建和就绪的过程。