Java并发之wait notify yield sleep join

wait() notify/notifyAll() 是继承自Object的方法。也就说每一个对象都有这两个方法。

wait()在调用前需获得monitor锁,调用后将利用该对象的线程阻塞并释放锁。线程状态由运行至阻塞。

notify()则唤醒因对象阻塞的线程。将线程由阻塞队列转移至就绪队列。

sleep() yield() join()继承自Thread类。其中sleep(), yield()是静态方法,join()不是。

sleep()看起来和wait()很像,不过sleep()调用前无需获得锁,调用后也不会释放锁。它只是将线程由运行转移至就绪。

yield()应用场景很少,几乎可以忽略。主要原因是yield()并不保证线程一定会挂起(),具体决定还是由调度器下。

join()比较有意思,它主要用于父子线程间同步,将并行化为串行。由于join()不是static,不能由Thread直接调用,需要新建Thread对象,然后由对象调用。

而join()的作用就是,等待该Thread执行完成,然后再往下执行。由于join()内部调用wait()实现,Thread执行完成后自动调用notify(),所以Java官方文档不建议对Thread实例调用wait() notify()方法。

时间: 2024-08-25 14:50:58

Java并发之wait notify yield sleep join的相关文章

Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别

Java线程中sleep().wait()和notify()和notifyAll().suspend和resume().yield().join().interrupt()的用法和区别 从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列).并且在某一时刻cpu只为ready queue中位于队列头部的线程服务. 但是当前正在被服务的线程可能觉得cpu的服务质量不够好,于是提前退出,这就是yield. 或者当前正在被服务的线程需要睡一会,醒来后继续被服务,这就是sleep. 

Java开发之Mybatis框架

mybasits配置文件书写1.configer文件配置<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><

Java并发之synchronized关键字深度解析(二)

前言 本文继续[Java并发之synchronized关键字深度解析(一)]一文而来,着重介绍synchronized几种锁的特性. 一.对象头结构及锁状态标识 synchronized关键字是如何实现的给对象加锁?首先我们要了解一下java中对象的组成.java中的对象由3部分组成,第一部分是对象头,第二部分是实例数据,第三部分是对齐填充. 对齐填充:jvm规定对象的起始内存地址必须是8字节的整数倍,如果不够的话就用占位符来填充,此部分占位符就是对齐填充: 实例数据:实例数据是对象存储的真正有

深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue

关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入理解Java并发之synchronized实现原理 Java并发编程-无锁CAS与Unsafe类及其并发包Atomic 深入理解Java内存模型(JMM)及volatile关键字 剖析基于并发AQS的重入锁(ReetrantLock)及其Condition实现原理 剖析基于并发AQS的共

Java并发之CountDownLatch的使用

Java并发之CountDownLatch的使用 一. 简介 Java的并发包早在JDK5这个版本中就已经推出,而且Java的并发编程是几乎每个Java程序员都无法绕开的屏障.笔者今晚在家闲来无事,翻看了以前的博客,发现好久都没有写过博客,就想着写点东西,写点什么好了,思来想去很久,决定在这段时间里写写关于Java并发相关的东西.由于是突然兴起,所有就没有什么规划,想到什么就写点什么吧,没想到首先想到的就是CountDownLatch的这个类,那就说说这个类吧. 二. CountDownLatc

Java并发之CyclicBarria的使用

Java并发之CyclicBarria的使用 一.简介 笔者在写CountDownLatch这个类的时候,看到了博客园上的<浅析Java中CountDownLatch用法>这篇博文,为博主扎实的技术功底所折服,对Java多线程方面的只是信手拈来,首先在此感谢博主给了我灵感,让我进一步了解了CountDownLatch的用法,在此请收下小弟的膝盖(如果博主能够看到的化).借着<浅析Java中CountDownLatch用法>这篇博文,笔者想借着这个例子说一下 CyclicBarria

Java并发之CyclicBarria的使用(二)

Java并发之CyclicBarria的使用(二) 一.简介 之前借助于其他大神写过一篇关于CyclicBarria用法的博文,但是内心总是感觉丝丝的愧疚,因为笔者喜欢原创,而不喜欢去转载一些其他的文章,为此笔者自己原创了一个CyclicBarria的用法的示例Demo, 在此声明,该Demo没有实际的价值,仅仅只是演示CyclicBarria的用法,希望加深读者对"循环栅栏"的用法加深理解. 二.使用 需求假设:在D盘下有一个test文件夹,我们要使用两个线程将文件夹A, B, 拷贝

Java中wait()和notify()方法的使用

1. wait方法和notify方法 这两个方法,包括notifyAll方法,都是Object类中的方法.在Java API中,wait方法的定义如下: public final void wait() throws InterruptedException Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this ob

Java并发之Semaphore的使用

Java并发之Semaphore的使用 一.简介 今天突然发现,看着自己喜欢的球队发挥如此的棒,然后写着博客,这种感觉很爽.现在是半场时间,就趁着这个时间的空隙,说说Java并发包中另外一个重量级的类Semaphore,这个类从字面意义上理解是"信号量". 那么什么是信号量呢?我用一种比较通俗的方式来跟大家解释一下,就是在该类初始化的时候,给定一个数字A,每个线程调用acquire()方法后,首先判断A是否大于0,如果大于0,就将A减去1,然后执行对应的线程,如果不大于0,那么就会阻塞