JAVA多线程01-基础篇-基本概念

多线程是java中非常重要的一个部分,本系列文章从线程开始,逐步延伸到多线程的内容,欢迎大家互相交流学习

本节摘要:介绍进程、线程的基本概念,介绍线程的状态以及状态之间的转换关系

进程:在内存中独立运行的应用程序,拥有系统资源(cpu,内存),例如QQ,邮件等,因为进程处于不同的内存,所以进程间通讯比较困难。

线程:可以理解为进程中的一段代码(单一的一个顺序控制流),例如我们程序中的main方法,这个线程就是一个主线程,一个进程中包含多个线程,线程间共享所属进程的资源(CPU,内存),运行过程中是通过抢占CPU时间片来执行的,cpu会轮流给每个线程分配时间,线程间通讯很容易,速度也很快

并行:每个线程独占CPU资源,真正的同时执行

并发:多个线程轮流占用CPU资源

为什么要多线程

  1. 多核心
    随着处理器核心数量越来越多,可以大幅提高程序的处理效率
  2. 快速响应
    多个任务可以通过多个线程并行去处理,大大提升响应速度

线程的状态图

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容