多线程是java中非常重要的一个部分,本系列文章从线程开始,逐步延伸到多线程的内容,欢迎大家互相交流学习
本节摘要:介绍进程、线程的基本概念,介绍线程的状态以及状态之间的转换关系
进程:在内存中独立运行的应用程序,拥有系统资源(cpu,内存),例如QQ,邮件等,因为进程处于不同的内存,所以进程间通讯比较困难。
线程:可以理解为进程中的一段代码(单一的一个顺序控制流),例如我们程序中的main方法,这个线程就是一个主线程,一个进程中包含多个线程,线程间共享所属进程的资源(CPU,内存),运行过程中是通过抢占CPU时间片来执行的,cpu会轮流给每个线程分配时间,线程间通讯很容易,速度也很快
并行:每个线程独占CPU资源,真正的同时执行
并发:多个线程轮流占用CPU资源
为什么要多线程:
- 多核心
随着处理器核心数量越来越多,可以大幅提高程序的处理效率 - 快速响应
多个任务可以通过多个线程并行去处理,大大提升响应速度
线程的状态图
timg.jpg线程状态说明:
1. 新建状态:线程对象被创建后,就进入了新建状态,例如:Thread t1 = new Thread();
2. 可运行状态(Runnable):线程调用start()方法后,就进入可运行状态,等待获得cpu调度执行
3. 运行状态(Running):线程在获得cpu执行权限后,就进入到运行状态,当线程调用yield()方法后,线程从运行状态又回到可运行状态
4. 阻塞状态:是因为线程因为某种原因而失去cpu的执行权限,线程只有进入可运行状态,才能进入到运行状态,阻塞分为以下三种情况:
a.阻塞事件 :例如调用线程的sleep()方法,join()方法,或者I/O阻塞,线程就会进入到阻塞状态,当sleep()超时、join()超时,或者I/O执行完成,线程由阻塞状态进入到可运行状态
b.等待阻塞:调用线程的wait()方法时,线程会等待其他线程完成,此刻当前线程会释放锁,并进入到对象锁的等待池中,当调用对象的notify或者notifyAll()方法时,线程会从等待池进入到对象的锁池,当线程获得到对象锁后,就进入到可运行状态,等待cpu调度执行
c.锁阻塞(同步阻塞):当线程在获得对象锁时,由于对象的锁已经被其他线程获取,当前线程进入阻塞状态,直到当前线程获得到对象锁后,线程会进入到可运行状态
5.死亡状态:当线程正常执行完成,或者由于异常终止,线程进入到死亡状态,生命周期结束
转载请注明作者及出处,并附上链接http://www.jianshu.com/u/ada8c4ee308b
网友评论