`
can_do
  • 浏览: 266157 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Do家】Java中执行线程相关的方法wait和sleep有何区别?

阅读更多
前提:Java中线程的6种状态
>>NEW
>>RUNNABLE
>>BLOCKED
>>WAITING
>>TIMED_WAITING
>>TERMINATED

1> 代码执行方式上:
sleep方法为线程类Thread上的静态方法:Thread.sleep(long)

而wait方是某个对象的方法:obj.wait(),obj.wait(long);

2> 是否持有lock上:

执行sleep后不会释放lock,即一直拥有monitors,而执行wait后会释放lock

3> 是否消耗CPU时钟:
根据线程状态,都是非RUNNABLE的,其都不消耗cpu时钟;

3> 线程状态上:

执行sleep(nms)后,线程状态为:TIMED_WAITING

执行wait后,分情况,如果参数带时间,则为TIMED_WAITING,否则,不带时间,为WAITING

***********************************
"GC Daemon" #16 daemon prio=2 os_prio=0 tid=0x0000000002db2000 nid=0x3083 in Object.wait() [0x00007f05122cd000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000f7344178> (a sun.misc.GC$LatencyLock)
at sun.misc.GC$Daemon.run(GC.java:117)
- locked <0x00000000f7344178> (a sun.misc.GC$LatencyLock)

"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x0000000002348800 nid=0x3077 in Object.wait() [0x00007f051c909000]
   java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000f7346748> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x00000000f7346748> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"idle_connection_reaper" #135 daemon prio=5 os_prio=0 tid=0x00007efbb80a3000 nid=0xf4 waiting on condition [0x00007efb434f0000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at com.aliyun.oss.common.comm.IdleConnectionReaper.run(IdleConnectionReaper.java:24)
****************************************

【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:

分享到:
评论

相关推荐

    Java基本功之中断线程的理解[参考].pdf

    Java中的线程中断是多线程编程中一个重要的概念,主要用来优雅地停止线程的执行。线程中断并不是立即终止线程,而是设置线程的中断状态,并通过特定方式来响应这个中断请求。以下是对Java中断线程的详细解释: 1. *...

    java两个线程同时写一个文件

    【Java两个线程同时写一个文件】在Java编程中,多线程环境下处理文件操作时,需要特别注意线程安全和资源同步。当两个线程尝试同时写入同一个文件时,可能会导致数据混乱或者文件损坏。Java提供了多种机制来解决这个...

    Java线程间的通信方式详解

    Java线程间的通信是多线程编程中的重要概念,它涉及到如何协调多个并发执行的线程,确保数据的一致性和正确性。本文将详细介绍两种常见的Java线程通信方式:同步和while轮询。 1. 同步(Synchronized) 同步是Java...

    超级有影响力霸气的Java面试题大全文档

    16、sleep() 和 wait() 有什么区别? sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的...

    JAVA面试题.doc

    11. Java 中的多线程可以使用 sleep()、suspend()、wait()、yield() 等方法来控制线程的执行。 八、 Log4j 12. Log4j 是一个 Java 日志框架,提供了日志记录和输出功能。Log4j 的优先级从高到低的排序是 error&gt;...

    Java试题-CoreJava试题

    8. **创建线程**:Java中创建线程主要有两种方式:通过实现Runnable接口和继承Thread类。 9. **线程状态**:使线程进入阻塞状态的方法包括等待IO资源、调用wait()方法以及同步机制中的对象锁。sleep()不会使线程...

    java面试资料,面试题最好的面试资料

    8. **wait()和sleep()**:wait()使线程进入等待状态并释放锁,sleep()则不释放锁。wait()通常用于线程间通信,sleep()用于暂停线程执行。 9. **synchronized和volatile**:synchronized用于锁定代码块或方法,保证...

    Java 17道基础面试题.docx

    - `wait()`, `sleep()`, `notify()`, `notifyAll()`都是线程同步的相关方法。`wait()`和`notify()`、`notifyAll()`需要在同步块或同步方法中使用,用于控制线程间的协作。 10. **多线程的实现与同步** - 多线程的...

    CoreJava考试试题---达内科技.pdf

    - 线程可以通过调用`Thread.sleep()`、等待资源可用(如I/O操作)、调用`Object.wait()`等方法进入阻塞状态。需要注意的是,`notify()`方法不会使当前线程阻塞,而是唤醒正在等待的线程。 ### 10. 对象同步 - **...

    Java中级面试题.docx

    1. **Java中的wait()和sleep()的区别**: - `wait()`是Object类的一个方法,它会使当前线程进入等待状态,释放它所持有的锁,直到其他线程调用`notify()`或`notifyAll()`唤醒它。而`sleep()`是Thread类的一个静态...

    九月全国计算机等级考试二级Java.pdf

    九月全国计算机等级考试二级Java的知识点涵盖了Java语言的核心概念和编程技能,这些知识点是考生在备考过程中需要深入理解并熟练掌握的。以下是从提供的文件内容中提炼出的详细知识点: 1. Java基础语法和结构 - ...

    有关java的编程实例

    - **线程状态与控制**:熟悉线程的生命周期,以及如何使用join()、sleep()、wait()和notify()方法控制线程行为。 7. **网络编程** - **Socket通信**:通过TCP/IP协议实现客户端与服务器端的交互,理解套接字的...

    Java面试宝典2010版

    46. **Java线程状态与控制方法**:Java中的线程可以处于新建、就绪、运行、阻塞、死亡等状态。常用的线程控制方法包括`join()`、`interrupt()`等。 47. **`sleep()`与`wait()`的区别**:`sleep()`是`Thread`类的方法...

    DoSleep

    `wait()`和`join()`需要在同步块或同步方法中调用,它们涉及到对象锁的释放和重新获取,而`sleep()`则不会释放任何锁。 6. **线程调度** `Thread.sleep()`可以用来调整线程调度策略,例如,让某些低优先级的线程在...

    Java基础讲义PPT

    Java是一种广泛使用的面向对象的编程语言,以其跨平台性、高效性和灵活性著称。这份"Java基础讲义PPT"涵盖了三个部分,旨在为初学者提供全面的Java基础知识。以下是根据PPT标题和描述可能涉及的主要知识点: 1. **...

    java基础知识笔记总结

    - 可以通过join()、sleep()等方法控制线程的执行。 6. **多线程安全问题** - 当多个线程并发访问共享资源时可能会出现问题。 7. **多线程安全问题的解决方法** - 解决方法包括使用synchronized关键字、...

    Java期中考试参考资料

    - **同步机制**:掌握synchronized关键字,以及wait()、notify()和notifyAll()方法在并发控制中的应用。 8. **Java反射机制** - **Class类**:理解Class对象的作用,如何获取Class对象,以及通过Class对象进行...

Global site tag (gtag.js) - Google Analytics