`
vyloy
  • 浏览: 80731 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

Thread.yield 和 Thread.sleep 是没有任何同步语义的

    博客分类:
  • Java
阅读更多
http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html 17.3
引用

Thread.sleep causes the currently executing thread to sleep (temporarily cease execution) for the specified duration, subject to the precision and accuracy of system timers and schedulers. The thread does not lose ownership of any monitors, and resumption of execution will depend on scheduling and the availability of processors on which to execute the thread.

It is important to note that neither Thread.sleep nor Thread.yield have any synchronization semantics. In particular, the compiler does not have to flush writes cached in registers out to shared memory before a call to Thread.sleep or Thread.yield, nor does the compiler have to reload values cached in registers after a call to Thread.sleep or Thread.yield.


引用

For example, in the following (broken) code fragment, assume that this.done is a non-volatile boolean field:

引用

while (!this.done)
    Thread.sleep(1000);

The compiler is free to read the field this.done just once, and reuse the cached value in each execution of the loop. This would mean that the loop would never terminate, even if another thread changed the value of this.done.


作者:翁志艺
分享到:
评论

相关推荐

    C#中Task.Yield的用途深入讲解

    本文将深入讲解Task.Yield的用途,通过示例代码和详细的解释,帮助读者更好地理解和应用Task.Yield。 一、什么是Task.Yield? Task.Yield是一个特殊的Task,它在创建时就已经完成了,也就是说执行时间为0的Task。...

    多线程sleep,yield,wait区别

    - `Thread.sleep(millisecond)` 方法来自 `java.lang.Thread` 类,它使当前正在执行的线程暂停指定的毫秒数,并将线程的执行权交还给操作系统。 - 睡眠结束后,线程并不会自动恢复执行,而是需要等待系统的调度。 ...

    java 线程让步(Yield)

    Java线程让步(Yield)是Java多线程编程中的一个重要概念,它涉及到线程调度和并发控制。在多线程环境下,线程让步意味着一个正在运行的线程主动放弃当前的时间片,以便其他就绪状态的线程有机会执行。这与线程的...

    JavaThread.pdf

    - Thread.sleep()使当前线程休眠指定的毫秒数,Thread.yield()则是让当前线程让步,给其他线程运行的机会。 - Thread.dumpStack()打印当前线程的堆栈跟踪,join()方法等待线程终止。 9. **监控和调试** - Thread...

    (多线程)leetcode1115. 交替打印FooBar 记得Thread.yield();

    这个题目考察的是线程同步和协作,以及如何在Java中实现这一目标。 首先,题目给出的`FooBar`类有两个方法,`foo()`和`bar()`,它们分别负责打印"foo"和"bar"。我们需要确保这两个方法能够正确地交替执行,而不是...

    07 深入Thread类—线程API精讲.pdf

    `Thread.sleep(long millis)`和`Thread.sleep(long millis, int nanos)`这两个方法用于使当前线程进入休眠状态,不释放任何锁资源。休眠时间结束后,线程会自动从阻塞状态恢复,重新加入到可运行队列,等待CPU分配...

    java_Thread.rar_java thread runable_thread runable

    - `Thread.sleep(long millis)`:使当前线程暂停指定毫秒数,让其他线程有机会执行。 - `Thread.yield()`: 让当前线程暂停,让其他相同优先级的线程有机会执行。 此外,`java.util.concurrent`包提供了高级线程管理...

    sleep()、wait()、yield()和join()方法特点及区别.docx

    3. **调用位置**:`wait()`, `notify()`和`notifyAll()`必须在同步环境中(同步方法或同步代码块)调用,而`sleep()`可以在任何地方调用。 4. **异常处理**:`sleep()`方法需要捕获`InterruptedException`,而`wait...

    java中yieldsleep以及wait的区别.pdf

    Java中的多线程编程涉及到许多关键概念,包括`yield()`, `sleep()`, ...`yield()`是轻量级的让步,`sleep()`用于短时间的暂停,而`wait()`则涉及线程间的同步和通信。理解这些方法的正确使用是编写高效并发程序的基础。

    【IT十八掌徐培成】Java基础第08天-01.多线程-yield.zip

    此外,如果当前线程是唯一可运行的线程,那么`yield()`就没有任何意义。 在实际开发中,`yield()`并不常用,通常是在需要优化特定场景下的线程行为时才考虑使用,例如在处理大量短生命周期的线程时,可以尝试用`...

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、notifyAll()用法 wait()、notify()和notifyAll()是Object类...

    javathread.part05.rar

    Java提供了丰富的线程控制方法,如`start()`启动线程,`sleep()`使线程暂停一段时间,`join()`让当前线程等待指定线程结束,`yield()`让当前线程让出CPU执行权,以及`interrupt()`中断线程等。 Java还提供了同步...

    javathread.part104.rar

    以上只是部分Java线程编程的核心知识点,`javathread.part104.rar`中可能还会包含更多高级主题,如线程池的配置与优化、线程通信(例如`join()`, `Thread.sleep()`, `yield()`)以及并发工具类的深入探讨。...

    Java sleep方法及中断方式、yield方法代码实例

    在Java多线程编程中,`Thread.sleep()`、中断机制以及`Thread.yield()`方法都是控制线程行为的重要工具。接下来我们将深入探讨这三个知识点,并通过示例代码来展示它们的实际应用。 一、`Thread.sleep()`方法 `...

    javathread.part01.rar

    Java Thread类是线程的核心,它提供了用于创建、控制和管理线程的方法。 1. **线程的创建方式** - 继承Thread类:创建一个新的类,该类继承自Thread类,并重写它的run()方法。然后创建该类的实例并调用start()方法...

    高薪程序员面试题精讲系列63之说说sleep()、yield()、join()、wait()的区别.pdf,这是一份不错的文件

    本资源主要讲解了Java中四个常用的线程控制方法:sleep()、yield()、join()和wait(),它们是Java多线程编程中的重要组成部分。下面是对每个方法的详细讲解: 1. sleep()方法: sleep()方法是Thread类...

    thread-multi.zip

    `Thread.yield()`让当前线程暂停,让其他线程有机会运行。 6. **线程优先级**: Java线程有优先级,通过`setPriority()`方法可以设置线程优先级,但实际效果受操作系统调度策略影响,不应过分依赖。 7. **死锁**...

    Java_programming_code_improve_thread_priority.rar_java programmi

    另外,`Thread.sleep(long milliseconds)`方法能让线程暂停指定的时间,以便其他线程有机会执行,这在处理I/O操作或避免过度占用CPU资源时非常有用。 总的来说,理解并适当地使用线程优先级能够帮助我们优化多线程...

    java核心知识点整理.pdf

    25 3:ServicorTo 和 ServicorFrom 互换................................................................................................................25 2.3.3.1. 2.4.1. 如何确定垃圾 ......................

Global site tag (gtag.js) - Google Analytics