总结:Java多线程中wait和sleep的区别
来源:互联网 发布:c4d r18 for mac下载 编辑:程序博客网 时间:2024/05/21 14:58
一、对wait和sleep的个人理解
wait表示等待的意思,当线程调用wait方法时,线程将会处于等待状态,如果想要再次执行调用过wait方法的线程需要将其唤醒,使其脱离等待状态
sleep表示休眠的意思,这种休眠是有时间限制的,休眠时间到了执行sleep方法的线程会继续执行下去
二、区别:
(1)wait()被定义在Object类中,它有函数的重载形式,可以有毫秒值,也可以没有
(2)sleep()被定义在Thread类中,并且是一个static方法,必须有毫秒值
(3)wait()释放cpu执行权,释放锁
(4)sleep()释放cpu执行权,不释放锁
(5)wait()必须写在同步代码块中,也就是说需要有锁的支持
(6)sleep()可以写在任意地方,但是具体让哪个线程休眠,取决于哪个线程在执行该代码
代码演示等待-唤醒机制:
//线程间通信-等待唤醒机制package thread;class Resource1{ String name; String gender; boolean flag; public String toString() { return name+"---"+gender; }}class Input1 implements Runnable{ Resource1 resource; Input1(Resource1 resource) { this.resource=resource; } public void run() { int i=0; while(true) { synchronized (resource) { if(!resource.flag) { try { resource.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } if(i%2==0) { resource.name="mike"; resource.gender="mail"; } else { resource.name="迈克"; resource.gender="男"; } resource.flag=false; resource.notify(); } i++; } }}class Output1 implements Runnable{ Resource1 resource; Output1(Resource1 resource) { this.resource=resource; } public void run() { while(true) { synchronized(resource) { if(resource.flag) { try { resource.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(resource); resource.flag=true; resource.notify(); } } }}public class ThreadDemo4{ public static void main(String[] args) { Resource1 resource=new Resource1(); Input1 in=new Input1(resource); Output1 out=new Output1(resource); Thread inThread=new Thread(in); Thread outThread=new Thread(out); inThread.start(); outThread.start(); }}
0 0
- 总结:Java多线程中wait和sleep的区别
- java多线程(7)--多线程中sleep和wait的区别
- Java多线程sleep和wait的区别,总结得非常好。
- java多线程中wait和sleep的区别
- java多线程中wait()和sleep()方法的区别
- java中的多线程中wait和sleep方法的区别
- 多线程中sleep()和wait()的区别
- 多线程中 wait和sleep的区别
- java多线程 sleep()和wait()的区别
- java多线程 sleep()和wait()的区别
- java多线程 sleep()和wait()的区别
- java多线程 sleep()和wait()的区别
- java多线程 sleep()和wait()的区别
- java多线程 sleep()和wait()的区别
- java多线程 sleep()和wait()的区别
- java多线程 sleep()和wait()的区别
- java多线程 sleep()和wait()的区别
- java多线程 sleep()和wait()的区别
- C# 中的 == 和 equals()有什么区别?/java中==和equals和hashCode的理解
- PAT--六度空间 (30)--vector数组表示图
- (others)编写PPPOE数据包
- Android Studio集成ShareSDK免费短信平台
- Java解析XML
- 总结:Java多线程中wait和sleep的区别
- 黑马程序员:Java基础学习——异常
- android xml文件的序列化--XmlSerializer简单用法
- 浏览器内核
- 哈希表的C++实现
- 第一章第五题
- LeetCode 62/63/120/64 Unique PathsI/II Triangle/Min sum Path/Rectangle Area--DP
- Android开发规范
- xpath学习