关闭

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

标签: threadclassstringobjectjvmc
11641人阅读 评论(0) 收藏 举报
分类:

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

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

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

第一个:

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

运行效果如下:

第二个:

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

运行效果如下:

第三个:

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

运行效果如下:

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

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

2
0
查看评论

线程的等待唤醒机制

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

线程的等待与唤醒机制

为了更高效的处理一些时间片短,任务量大的任务,我们可能会经常用到多线程。但是多线程的环境下,很容易出现线程并发问题,线程死锁就是很常见的一种并发问题。为了避免此类问题,我们会用到线程间的通信,而等待唤醒机制,就是线程间通信的一种形式。 等待唤醒机制用到的方法主要有: public final...
  • qq_24610749
  • qq_24610749
  • 2017-05-09 11:03
  • 405

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

<br /><br /><br /><br /><br />从这个图中可以看出,等待状态是一种特殊的状态。使线程陷入等待实际上是暂时剥夺线程当前拥有的CPU时间片和获取CPU时间片的资格,使其返回到就绪状态。除非被唤醒,否则等待时间已满,该...
  • cuiran
  • cuiran
  • 2011-01-13 14:24
  • 11641

java中线程的等待与唤醒

1. 线程的挂起和唤醒       挂起实际上是让线程进入“非可执行”状态下,在这个状态下CPU不会分给线程时间片,进入这个状态可以用来暂停一个线程的运行;在线程挂起后,可以通过重新唤醒线程来使之恢复运行。 挂起的原因可能是如下几种情况: ...
  • u011806339
  • u011806339
  • 2014-08-29 16:24
  • 1984

多线程wait等待和notify唤醒

package com.ibeidou.thread; /**  * 测试wait和notify方法  * 两个线程操作同一对象,一个线程调用wait方法,另一个之后调用notify方法  * 等待是当前线程对对象等待,唤醒是线程对等待对象的所有线程唤醒(可随机...
  • muxiaoshan
  • muxiaoshan
  • 2012-04-11 16:48
  • 3332

多线程等待唤醒机制:从wait()和sleep()的差别说起

1. wait():释放资源,释放锁 sleep():释放资源,不释放锁 wait():Object的方法,用在同步当中,是同步锁的方法,以锁控制线程 sleep():线程类Thread本身的静态方法 例子: class Person { String name; String gend...
  • ghbfgb
  • ghbfgb
  • 2016-11-13 11:26
  • 2043

多线程——等待-唤醒机制

package com.work.wor01; /** * 等待唤醒机制 * 涉及到了3个方法: * 1.wait():等待,将正在执行的线程释放了其执行资格和执行权利,并且将他存储到线程池当中。 * (线程池:运行当中会出现很多正在被冻结的线程,都会存储到线程持当中,线程池其实就是容器,用...
  • u012369385
  • u012369385
  • 2016-08-20 10:59
  • 476

Java并发编程(二)线程同步和等待唤醒机制

概述线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要原因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。 因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等...
  • huaxun66
  • huaxun66
  • 2017-09-12 10:38
  • 591

java 多线程等待、唤醒机制实例

例子: 1、实体类 public class Student {     String name;     int age;     boolean flag = false; // 表示没有值 } 2、线程...
  • helongzhong
  • helongzhong
  • 2016-10-26 12:46
  • 2015

Java线程之等待wait唤醒notify示例(一)

线程等待,线程唤醒 “锁“中的主要方法 wait(): 让线程处于冻结状态,被wait的线程会被存储到线程池中。 notify():唤醒线程池中一个线程(任意),没有顺序。 notifyAll():唤醒线程池中的所有线程。 因为synchronized模块的监视器是任意对象,所...
  • u012768347
  • u012768347
  • 2016-04-26 16:36
  • 3327
    个人资料
    • 访问:1832277次
    • 积分:17060
    • 等级:
    • 排名:第692名
    • 原创:248篇
    • 转载:19篇
    • 译文:1篇
    • 评论:652条
    个人微信公众号

    欢迎关注微信公众号,了解更多新动态

    新浪微博
    赞赏
    最新评论