进程和线程

各进程是独立的,而各线程则不一定,同一进程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的管理和保护;而进程正相反。

为什么要用多线程

单核时代,为了提高cpu和io设备的综合利用率,一个线程执行cpu计算时,另一个线程进行io操作。

多核时代,为了提高cpu利用率,使多个核心都被使用到。

线程的生命周期和状态

new 初始状态

new-(Thread.start())->runnable

runnable 运行状态(包含running运行中 和 ready就绪)

running -(yield()、系统调度)->ready

ready -(系统调度获得时间片)->running

blocked 阻塞状态

running --(等待进入synchronized方法或synchronized块)--> blocked

blocked --(获取到锁)--> running

waiting 等待状态 表示当前线程需要其他线程做出动作(通知或中断)

running --(object.wait(),thread.join(),lockSupport.park())-->waiting

waiting --(object.notify(),object.notifyAll(),lockSupport.unpark(thread))-->running

time_waiting 超时等待 表示当前线程超过一段时间自动返回running状态

running --(object.wait(long),thread.join(long),lockSupport.parkNanos(),lockSupport.parkUntil(),thread.sleep(long))-->time_waiting

time_waiting--(object.notify(),object.notifyAll(),lockSupport.unpark(thread))-->running

terminated 终止状态

running --(执行完成)-->terminated