第二部分 线程的等待和唤醒

原创 2011年01月13日 14:24:00

从这个图中可以看出,等待状态是一种特殊的状态。使线程陷入等待实际上是暂时剥夺线程当前拥有的CPU时间片和获取CPU时间片的资格,使其返回到就绪状态。除非被唤醒,否则等待时间已满,该线程将一直等待。不会被JVM线程调度器选中并赋予CPU时间片。处于等待的线程一旦恢复执行,与其他处于就绪状态被线程调度器选中的线程不同,将从上次结束执行的断点处开始执行,而非从头开始。

 使线程中断运行,返回就绪状态的手段是调用java.lang.Object对象的wait()方法;唤醒处于等待状态的线程的手段是调用java.lang.Object对象的notify()方法

为了加深理解,下面就通过具体例子来说明线程等待和唤醒

第一个:

通过继承Thread来创建子线程。

运行效果如下:

第二个:

通过实现Runnable接口来创建子线程

运行效果如下:

第三个:

通过实现Runnable,又通过Object对象的notifyAll()方法一次性唤醒多个同一个对象创造的线程。

运行效果如下:

总结:1).利用Thread.sleep().使线程开始休眠指定的时间,以便让各个子线程进入等待状态。

      2).synchronized同步锁的使用。这一块在后面文章中会加以解说。

线程的等待唤醒机制

等待唤醒机制就是用于解决线程间通信的问题的,使用到的3个方法的含义如下: wait: 告诉当前线程放弃执行权,并放弃监视器(锁)并进入阻塞状态,直到其他线程持有获得执行权,并持有了相同的监视器(锁)并...
  • mChenys
  • mChenys
  • 2015年11月18日 17:52
  • 3133

多线程wait等待和notify唤醒

package com.ibeidou.thread; /**  * 测试wait和notify方法  * 两个线程操作同一对象,一个线程调用wait方法,另一个之后调用notify方法  *...

线程中的等待与唤醒

上一篇文章讲到join()方法的时候,用到了一个函数即为yield()方法,它的作用是将cup让与具有相同优先级的线程去使用。本篇文章就为大家讲述线程中的一些关于等待和唤醒的函数。 sleep(): ...

线程-休眠和唤醒

ThreadState是一个枚举类型,它反映的是线程所处的状态。当一个Thread实例刚创建时,它的ThreadState是Unstarted;当此线程被调用Start()启动之后,它的ThreadS...
  • wxs2008
  • wxs2008
  • 2017年01月06日 16:45
  • 803

线程中各种唤醒、等待、睡眠方法之间的区别

一、notify()方法和notifyAll()方法的区别 notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成等待该对象上的锁,一旦该对象被解锁,他们就会去竞...

线程的等待与唤醒

当前线程在继续执行前需要等待一个条件,仅有synchornized关键字是不够的。虽然synchornized阻止并发访问一个对象,但是它没有实现线程中的通信。为此Object提供了notify(),...
  • jjarchu
  • jjarchu
  • 2015年11月25日 17:49
  • 774

线程间的等待唤醒机制-(一)

线程间的同步等待唤醒机制线程的wait()方法使用就是放弃了执行资格 等待的线程都存在线程池当中。 方法:只能在现场同步当中使用。下面的方法必须强调监视器wait();// 可以是当前线程进行等待...

【进程&线程】睡眠与唤醒

无法进入临界区的时候选择阻塞而不是忙等待。有sleep和wakeup两个方法。 信号量semaphore up和down两种操作。down做减一操作,如果信号量大于0就减一,不然就睡眠线程...
  • hhh132
  • hhh132
  • 2017年05月10日 10:02
  • 280

线程的等待与唤醒机制

为了更高效的处理一些时间片短,任务量大的任务,我们可能会经常用到多线程。但是多线程的环境下,很容易出现线程并发问题,线程死锁就是很常见的一种并发问题。为了避免此类问题,我们会用到线程间的通信,而等待唤...

线程等待的几种方式

开发过程中经常遇到需要等待某线程结束的情况,目前碰到两种方法,总结下。以后有增加再更新。 1)CountDownLatch CountDownLatch是一个同步辅助类,可以用来等待一个或者几个线程结...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第二部分 线程的等待和唤醒
举报原因:
原因补充:

(最多只允许输入30个字)