一目了然,Java线程各方法区别:sleep, yield, join, wait, notify
来源:互联网 发布:下载skype软件 编辑:程序博客网 时间:2024/05/17 04:29
一.各方法定义:
1. staic voidsleep(long millis), static void sleep(long millis, int nanos)
当前线程暂停,给予其他线程执行机会,但不会释放锁,如果被打断,抛出InterruptedException异常。
2.static void yield()
当前线程暂停,给予其他相同优先级或者更高优先级线程执行机会,但不会释放锁。
3.public final void join(),
public final void join(long millis),
public final void join(long millis,
int nanos)
在当前线程里面,调用other.join,就会暂停当前线程,等待其他线程执行完毕才会执行当前线程。指定时间参数,就代表最长等待
时间,时间解决,继续当前线程执行。会抛出InterruptedException异常。
4.public final void wait(),
public final void wait(long timeout),
public final void wait(long timeout,int nanos)
使当前线程等待,直到被调用notify或者notifyAll方法。时间参数指明最长等待时间。Object自带的方法。会抛出
InterruptedException异常。
4.public final void notify(),
public final void notifyAll()
如果只有一个等待的线程,那么两者都是随机唤醒其中一个线程,由cpu调度器决定具体唤醒哪一个线程。
二.各方法的对比
1.sleep VS. yield
相同点:sleep 和yield都不会释放对象的锁,都会导致当前线程等待。
不同点:sleep具有更大的灵活性,可以指定等待时间,可以唤醒其他更低优先级的线程,会抛出异常;yield只能唤醒同等优先级或
者更高优先级的线程,不会给更低优先级线程执行机会,不会抛出异常。
2.yield,sleep都不会释放对象的锁, wait会释放对象的锁。如果不释放对象的锁,其他线程就没办法执行同步的代码。
三.如果希望明确地让一个线程给另外一个线程运行的机会,可以采取以下的办法之一:
1、调整各个线程的优先级
2、让处于运行状态的线程调用Thread.sleep()方法
3、让处于运行状态的线程调用Thread.yield()方法
4、让处于运行状态的线程调用另一个线程的join()方法
- 一目了然,Java线程各方法区别:sleep, yield, join, wait, notify
- Java 线程间的协作(wait/notify/sleep/yield/join)
- java 线程:sleep join yield | wait notify notifyAll
- 【Java】【线程同步】sleep,join,yield,synchronized,wait,notify
- java线程sleep join yield wait notify notifyAll
- java sleep() join() yield() wait()和notify()、notifyAll() 区别详解
- sleep,yield,join,notify,wait,notifyAll区别
- java线程的sleep(),wait(),notify(),yield();
- Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- 2 个 List 集合数据求并、补集操作
- Java并发编程:Lock
- 两栏自适应布局
- 深度学习CNN常见模型详解——包含数据库
- 给Android项目中的工具类提供一个上下文对象
- 一目了然,Java线程各方法区别:sleep, yield, join, wait, notify
- 第142课:Spark面试经典系列之Cache和Checkpoint
- Unity3D中Prefab
- swagger ui和spring boot集成生成api文档
- 不同概率的抽奖
- php 分页类
- 推导相机变换矩阵
- 目前看到的最好的RNN、LSTM、GRU博客:Understanding LSTM Networks(翻译)
- 前端测试工具-摩卡(简单了解)