`
wangwengcn
  • 浏览: 175147 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

yield() join() sleep() wait() 区别

阅读更多
除了yield,其他方法都有阻塞效果,所以必须处理InterruptedException,因此在多线程任务中最好实现中断策略。
1.sleep()

    使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchronized同步块,其他线程仍然不同访问共享数据。注意该方法要捕获异常
   
比如有两个线程同时执行(没有Synchronized),一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的线程执行完成后,低优先级的线程才能执行;但当高优先级的线程sleep(5000)后,低优先级就有机会执行了。
   
总之,sleep()可以使所有优先级的线程得到执行的机会

 

2.join()
    join()
方法使调用该方法的线程在此之前执行完毕,也就是等待调用该方法的线程执行完毕后再往下继续执行。注意该方法也要捕获异常。其底层由wait方法实现。


3.yield()
   
它与sleep()类似,不会释放锁,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的线程有执行的机会

4.wait()notify()notifyAll()

    这三个方法用于协调多个线程对共享数据的存取,所以必须在Synchronized语句块内使用这三个方法。前面说过Synchronized这个关键字用于保护共享数据,阻止其他线程对共享数据的存取。但是这样程序的流程就很不灵活了,如何才能在当前线程还没退出Synchronized数据块时让其他线程也有机会访问共享数据呢?此时就用这三个方法来灵活控制。
    wait()
方法使当前线程暂停执行并释放对象锁标志,让其他线程可以进入Synchronized数据块,当前线程被放入对象等待池中。当调用 notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中的线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。
    notifyAll()
则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。
   
注意这三个方法都是java.lang.Ojbect的方法!

 

分享到:
评论

相关推荐

    线程中sleep、join、yield、wait的区别

    本文将详细解析线程中`sleep()`, `join()`, `yield()`, 和 `wait()` 四个方法的区别。 1. `sleep()` `sleep()` 方法是 `java.lang.Thread` 类的一个静态方法,它允许当前正在执行的线程在指定的毫秒数内暂停执行。...

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

    本文将深入探讨Java中的四个关键方法:`sleep()`, `wait()`, `yield()`和`join()`,以及它们各自的特点和区别。 首先,我们来看`sleep()`和`wait()`的区别: 1. **来源不同**:`sleep()`是`Thread`类的方法,它...

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

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

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

    "高薪程序员面试题精讲系列63之说说sleep()、yield()、join()、wait()的区别" 本资源主要讲解了Java中四个常用的线程控制方法:sleep()、yield()、join()和wait(),它们是Java多线程编程中的重要...

    Java线程中yield与join方法的区别

    之前,我讨论了一个wait()和sleep()方法区别的问题,这一次,我将会讨论join()和yield()方法的区别。坦白的说,实际上我并没有用过其中任何一个方法,所以,如果你感觉有不恰当的地方,请提出讨论。  Java线程调度...

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

    需要注意的是,`yield()`并不会像`sleep()`或`join()`那样使线程进入等待状态,而是让线程回到可运行状态,这意味着线程仍然可以随时被调度执行。 使用`yield()`的主要目的是提高线程的公平性,尤其是当有多个线程...

    java线程分析android project例子

    本文将深入探讨在Android项目中如何使用Java线程,并基于`TestThread`这个示例来解析`sleep()`, `join()`, `yield()`, `wait()`, `notify()`等线程控制方法以及相关注意事项。 首先,我们来看`sleep()`方法。它允许...

    javajava问问题题点

    sleep、wait 和 join 是 Java 中的线程控制方法。sleep 方法可以让线程暂停执行,wait 方法可以让线程等待对象锁,join 方法可以让线程等待目标线程执行完成。 yield yield 方法可以让线程礼让,释放 CPU 资源给...

    java线程分析java project例子

    java线程分析java project例子,里面分析了sleep(),join(),yield()和wait以及notify等方法的使用以及需要注意的地方。

    多线程控制方法

    本文将深入探讨四个重要的线程控制方法:`start()`、`sleep()`、`join()` 和 `yield()`,以及它们在实际应用中的作用。 首先,`start()` 方法是启动线程的核心方法。当创建一个 `Thread` 类的实例或其子类时,线程...

    java多线程相关面试题 1

    13. 说说:sleep、yield、join、wait 方法的区别 Java 中的 sleep、yield、join、wait 方法都是线程控制方法,它们的区别在于: * sleep 方法:使当前线程暂停执行一段时间 * yield 方法:使当前线程让出 CPU 时间...

    JUC学习.docx Java

    线程中常见的方法有`sleep`、`interrupt`、`isInterrupted`、`interrupted`、`park`、`yield`、`join`、`wait`和`notify`。`sleep`可以让线程进入等待状态,但不会释放锁。`interrupt`用于中断线程,尤其能打断`...

    多线程精心总结

    本文将深入探讨Java线程中的几个关键概念,包括`yield()`、`sleep()`、`wait()`、`join()`以及`synchronized`关键字,以及`run()`和`start()`的区别。 1. `yield()`、`sleep()`、`wait()`的区别: - `yield()`:这...

    java面试题.pdf

    2. sleep()、wait()、join()、yield() 之间的区别:sleep() 方法使线程休眠,wait() 方法使线程等待,join() 方法使线程等待其他线程完成,yield() 方法使线程让步。 3. Thread 和 Runnable 的区别:Thread 是线程类...

    Java软件开发实战 Java基础与案例开发详解 12-2 线程的生命周期 共10页.pdf

    5. **TIMED_WAITING(超时等待)**:线程处于有限期等待状态,等待另一个线程执行依赖于指定等待时间的操作,例如调用`Object.wait(long timeout)`、`Thread.join(long timeout)`或`Thread.sleep(long millis)`等...

    java线程学习资料

    #### 三、`sleep()`与`wait()`方法的区别 1. **`sleep()`**: - 是`Thread`类的静态方法。 - 使当前正在执行的线程暂停指定的时间,但不释放锁。 - **示例代码**: ```java Thread.sleep(1000); // 使当前线程...

    J2SE_5.0_第07章_容器1.rar

    3. **Join和Yield方法**:Thread.join()方法让调用线程等待指定线程执行完毕,而Thread.yield()方法则是让当前线程暂停,让其他可运行线程有机会执行。 4. **优先级**:Java线程有优先级,更高的优先级意味着更有...

    java线程编程从入门到精通(五).docx

    `interrupt()`方法可以用来中断一个线程,通常与`Thread.sleep()`或`Object.wait()`方法结合使用。当线程被中断时,会抛出`InterruptedException`。例如: ```java public class StopThreadDemo extends JFrame ...

    J2SE-多线程.ppt

    这些状态反映了线程在执行过程中的不同情况,例如,调用`sleep()`方法会使线程进入等待状态,而`join()`或`wait()`则可能导致阻塞。 线程控制方法包括`sleep()`、`join()`、`yield()`等。`sleep()`方法让当前线程...

    JAVA多线程操作方法实用大全

    `yield()`方法让当前线程暂停,回到就绪状态,允许其他相同优先级的线程有机会执行,但并不保证一定会有其他线程获得执行权。 `wait()`、`notify()`和`notifyAll()`方法是与对象监视器相关的,它们通常与`...

Global site tag (gtag.js) - Google Analytics