Java线程等待用法实例分析

 更新时间:2018年09月07日 14:32:21   作者:shuair  
这篇文章主要介绍了Java线程等待用法,结合实例形式分析了obj.wait()实现线程等待相关原理与操作技巧,需要的朋友可以参考下

本文实例讲述了Java线程等待用法。分享给大家供大家参考,具体如下:

线程等待

public class Hello {
  public static void main(String[] args) {
    A a = new A();
    new Thread(new MyRun(a)).start();
    new Thread(new MyRun1(a)).start();
  }
}
class MyRun implements Runnable {
  private A a;
  public MyRun(A a) {
    this.a = a;
  }
  @Override
  public void run() {
    synchronized (a) {
      a.setTitle("hello");
      try {
        a.wait();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      a.setNumber(12);
      System.out.println(a);
    }
  }
}
class MyRun1 implements Runnable {
  private A a;
  public MyRun1(A a) {
    this.a = a;
  }
  @Override
  public void run() {
    synchronized (a) {
      a.setTitle("world");
      a.setNumber(24);
      a.notifyAll();
      System.out.println(a);
    }
  }
}
class A {
  private String title;
  private Integer number;
  public String getTitle() {
    return title;
  }
  public void setTitle(String title) {
    this.title = title;
  }
  public Integer getNumber() {
    return number;
  }
  public void setNumber(Integer number) {
    this.number = number;
  }
  @Override
  public String toString() {
    return "A{" +
        "title='" + title + '\'' +
        ", number=" + number +
        '}';
  }
}

运行输出:

A{title='world', number=24}
A{title='world', number=12}

线程等待,obj.wait(),会释放当前的锁,对象的普通方法,obj.wait(超时时间),表示指定时间后可以自动唤醒

线程唤醒,obj.notify(),唤醒一个线程,obj.notifyAll(),唤醒所以线程,obj需要和线程等待的对象一致。

wait和sleep的区别

个人认为:sleep就是一种延缓代码执行的方法,wait是有关多线程的一些高级操作。

更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Spring与Spring boot的区别介绍

    Spring与Spring boot的区别介绍

    Spring Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置。接下来通过本文给大家介绍Spring与Spring boot的区别介绍,非常不错,需要的朋友参考下吧
    2017-04-04
  • 详解使用Mybatis-plus + velocity模板生成自定义的代码

    详解使用Mybatis-plus + velocity模板生成自定义的代码

    这篇文章主要介绍了详解使用Mybatis-plus + velocity模板生成自定义的代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • SpringBoot3实现优雅停机的完整流程

    SpringBoot3实现优雅停机的完整流程

    在现代微服务架构中,优雅停机(Graceful Shutdown)是一项重要功能,可以确保服务在关闭时处理完所有当前请求,避免突然终止连接或丢失数据,Spring Boot 3 提供了对优雅停机的内置支持,本文给大家介绍了SpringBoot3怎样优雅停机,需要的朋友可以参考下
    2024-10-10
  • Windows系统中Java调用cmd命令及执行exe程序的方法

    Windows系统中Java调用cmd命令及执行exe程序的方法

    这篇文章主要介绍了Windows系统中Java调用cmd命令及执行exe程序的方法,主要用到了IOException类,需要的朋友可以参考下
    2016-03-03
  • sentinel流量控制框架(目录设置)

    sentinel流量控制框架(目录设置)

    Sentinel 是面向分布式服务架构的高可用流量防护组件帮助开发者保障微服务的稳定性,本文重点给大家介绍sentinel流量控制框架的相关知识,感兴趣的朋友一起看看吧
    2022-03-03
  • Springboot 1.5.7整合Kafka-client代码示例

    Springboot 1.5.7整合Kafka-client代码示例

    这篇文章主要介绍了Springboot 1.5.7整合Kafka-client代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Java中集合LinkedList的原理与使用方法

    Java中集合LinkedList的原理与使用方法

    这篇文章主要给大家介绍了关于Java中集合LinkedList的原理与使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • APP转盘抽奖Java服务端接口详解

    APP转盘抽奖Java服务端接口详解

    这篇文章主要为大家详细介绍了APP转盘抽奖Java服务端接口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • jdk环境变量配置切换jdk版本及安装jdk后环境变量不生效问题解决办法

    jdk环境变量配置切换jdk版本及安装jdk后环境变量不生效问题解决办法

    这篇文章主要介绍了jdk环境变量配置切换jdk版本及安装jdk后环境变量不生效问题解决办法,包括配置JAVA_HOME、Path和CLASSPATH,以及如何验证配置是否成功,文章还讲解了如何切换JDK版本,并解决了安装新JDK后环境变量配置不生效的问题,需要的朋友可以参考下
    2024-12-12
  • Spring Data Jpa 复杂查询方式总结(多表关联及自定义分页)

    Spring Data Jpa 复杂查询方式总结(多表关联及自定义分页)

    这篇文章主要介绍了Spring Data Jpa 复杂查询方式总结(多表关联及自定义分页),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02

最新评论