java并发编程的艺术(五)-----线程状态

线程与进程?

线程是操作系统调度的最小单元,而进程是系统进行资源分配和调度的一个基本单位。
简单理解:进程是程序的一次执行,线程可以理解为进程中的执行的一段程序片段
360解释:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。

线程状态:

线程从被创建到终止一共有六种状态,分别是初始状态、运行状态、阻塞状态、等待状态、超时等待状态以及终止状态。

如何判读线程处于什么样的状态

这里写图片描述

  • 当线程被New实例化后,就意味着线程处于了初始状态

  • 当线程调用Thread.start方法后,线程就进入了运行状态,表明线程只要得到系统资源就可以直接运行。其中运行状态分为就绪和运行中,就绪状态指的是线程在等待系统CPU等系统资源,当获得系统资源则真正进入运行状态

  • 在就绪状态与运行中状态之间需要系统调度,当线程调用sleep、wait、join等方法时,线程就会进入等待状态或超时等待状态,进入等待状态的线程需要其他线程的通知(notify、notifyAll、unpark)才能返回到可运行状态,而超时状态则时增加了超时后自动返回运行状态的机制。
  • 在运行状态中,如果未获取到锁线程就会进入阻塞状态(被阻止在进入synchronized方法),直到获取锁或者被打断才可继续执行程序或者返回
  • 当线程执行完Runnable的run方法之后就进入了终止状态

java等待/通知机制

是什么?

Java等待/通知机制指的是一个线程A调用了对象的wait方法进入等待状态,而另外的一个线程B调用对象的notify或者notifyAll方法,线程A感知到这种变化过后从对象的wait方法返回进行后续的代码操作。最终这两个线程的代码执行是建立在这个对象上面进行交互的

有什么用?

实现“做什么”和“怎么做”之间的功能解耦,让程序之间具有良好的可伸缩性。“做什么”由消费者决定,它去通知相应的消费者实现做什么,而消费者接收到通知后去实现怎么做。

等待/通知的经典范式:

等待方(消费者):

//获取锁
synchronized(对象){
//条件满足进行后续操作,完成怎么做
//循环检查条件不满足则继续等待
     while(条件不满足){
          对象.wait();
          }
          满足后的代码执行
}

通知方(生产者)

//获取锁
synchronized(对象){
     改变条件
     对象.notifyAll();
}

创建线程的几种方式

看过下面这篇文章,真的总结得太好了,我着这辣鸡就别去关公面前耍大刀了,附上大佬的链接
http://blog.csdn.net/longshengguoji/article/details/41126119

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值