Java 线程 sleep wait 深入解析 Thread
来源:互联网 发布:不亦说乎的说的读音 编辑:程序博客网 时间:2024/06/05 02:41
wait 和 sleep 区别
- sleep 是 Thread 的方法,wait 是 Object 的方法
- sleep 不会释放锁,wait 会释放锁
- sleep 是休眠,wait 是挂起
- wait 唤醒需要用 notify 或者 notifyAll
- 而 sleep 则是休眠一段时间自己就恢复
- wait方法需要在synchronize块或者synchronize方法里调用,然而 sleep 不需要
- 如果需要线程停顿,使用 sleep;使用 wait 进行线程间的通信( implement inter-thread communication use wait method)
wait的一半用法
private Object monitor = new Object();public void methodA(){ //需要获取 synchronize on the lock object synchronized (monitor) { //wait会释放当前的锁,把该线程加到the “wait list” associated with the lock object monitor.wait(); }}
需求
两个线程,一个线程输出偶数,一个线程输出奇数,要求两个线程交替,得到1,2,3,4,5,6,7… 的效果
下面的代码注意是一个是
obj1.wait();obj1.notify();
另一个是
obj1.notify();obj1.wait();
这样就是A线程 wait,然后B线程唤醒notify A,B 自己 wait,然后A notify唤醒 B。
这样两个线程交替唤醒。
package a;public class EvenOddThreadTest { /** * @param args */ static Object obj1 = new Object(); static Object obj3 = new EvenOddThreadTest(); public static void main(String[] args) throws InterruptedException { new Thread() { @Override public void run() { for (int i = 1; i < 21; i += 2) { synchronized (obj1) { try { obj1.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } obj1.notify(); System.out.println(i + Thread.currentThread().getName()); } } } }.start(); new Thread() { @Override public void run() { for (int i = 2; i < 21; i += 2) { synchronized (obj1) { obj1.notify(); try { obj1.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(i + Thread.currentThread().getName()); } } } }.start(); }}
输出
1Thread-02Thread-13Thread-04Thread-15Thread-06Thread-17Thread-08Thread-19Thread-010Thread-111Thread-012Thread-113Thread-014Thread-115Thread-016Thread-117Thread-018Thread-119Thread-020Thread-1
参考文章
Difference between sleep() and wait()?
Difference between wait() and sleep() stackoverflow
Using wait/notify vs Thread.sleep() in Java QAT global
Difference between wait and sleep or difference between Sleep and yield in Java
0 0
- Java 线程 sleep wait 深入解析 Thread
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程) 详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程)sleep和wait的区别浅析
- Java Thread(线程)案例详解sleep和wait的区别
- java线程、锁、sleep、wait
- Java线程wait和sleep
- java线程(Thread)——wait、sleep、notify、线程的生命周期、状态
- Java Thread sleep和wait的区别
- Java Thread sleep和wait的区别
- Android 一些xml属性
- 语法
- 你觉得哪个开源的UML建模工具最好用?
- flash总结
- android开发 通过文字生成头像 (包含使用额外的字体)
- Java 线程 sleep wait 深入解析 Thread
- Android背景图片平铺
- Android多线程----异步消息处理机制之Handler
- Apache Shiro简介
- 归档— NSKeyedArchiver
- Genymotion 问题解决之 镜像下载(二)
- js 多setInterval冲突的解决方法
- 用canvas画一个钟表
- 屏幕适配