进程
进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。
线程
同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈。
程序计数器
字节码解释器通过改变程序计数器来依次读取指令,从而控制代码的流程控制。
多线程情况下,程序计数器用于记录当前线程执行的位置,从而当线程执行回来的时候, 可以知道线程上次运行到什么位置。
因此程序计数器的主要目的是为了线程切换后可以恢复到正确的执行位置
方法区
存放已被加载过的类信息,常量, 静态变量,即时编译器编辑的代码等数据
堆
存放新创建的对象
为什么使用线程
线程是程序执行的最小的最小单位, 线程间切换与调度的成本远小于进程
多核CPU意味着多个线程可以同时执行,减少上下文切换的开销。
多线程并发编程正是开发高并发系统的基础,利用好多线程可以提高系统整体的性能以及并发能力。
可能带来的问题
死锁,内存泄露, 上下文切换, 受限于硬件与软件的闲置问题。
- synchronized 关键字
synchronized关键字解决的是多个线程访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。