java中的sleep()和wait()的区别
JAVA 区别 WAIT sleep
2023-09-27 14:27:47 时间
区别
- 这两个方法来自不同的类分别是Thread和Object
sleep()方法,方法是属于Thread类中的。wait()方法,则是属于Object类中的。
- 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁)。
- wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
- sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常 、
代码示例
public class TestD {
public static void main(String[] args) {
new Thread(new Thread1()).start();
try {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
new Thread(new Thread2()).start();
}
private static class Thread1 implements Runnable{
@Override
public void run(){
synchronized (TestD.class) {
System.out.println("enter thread1...");
System.out.println("thread1 is waiting...");
try {
//调用wait()方法,线程会放弃对象锁,进入等待此对象的等待锁定池
TestD.class.wait();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("thread1 is going on ....");
System.out.println("thread1 is over!!!");
}
}
}
private static class Thread2 implements Runnable{
@Override
public void run(){
synchronized (TestD.class) {
System.out.println("enter thread2....");
System.out.println("thread2 is sleep....");
try {
//在调用sleep()方法的过程中,线程不会释放对象锁。
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("thread2 is going on....");
System.out.println("thread2 is over!!!");
//如果我们把代码:TestD.class.notify();给注释掉,即TestD.class调用了wait()方法,但是没有调用notify()
//方法,则线程永远处于挂起状态。
TestD.class.notify();
}
}
}
}
我靠。。我这记忆力绝了。。四年前看到的 我还记得是最主要是锁的区别。。虽然就回答上这一点。。但是还好没跑题,
相关文章
- java中HashSet的用法以及与HashMap的区别
- java sleep和wait的区别和联系
- java Runnable和Thread以及Callable的区别
- java 线程池的shutdown()与shutdownNow()方法的区别
- Java从入门到精通——基础篇之Servlet与JSP的区别
- java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor
- java 和 javasciprt 的区别
- java 与 c# 3des 加解密
- Java>>与>>>的区别
- 浅析java内存模型--JMM(Java Memory Model)
- java中的sleep()和wait()的区别
- JAVA 静态方法和实例方法的区别 (图表)
- java方法是什么?
- java设计模式之原型模式
- [java][JEECG] Maven settings.xml JEECG项目初始化 RouYi settings.xml配置
- java.util.Date和java.sql.Date的区别和相互转化
- 详解Java多线程编程中LockSupport
- 在java程序中实现发送邮件的功能
- java中 == 和 equals 和 hashCode 的区别
- Java IO流学习总结
- java 泛型E T ?的区别
- 【Java基础系列】final/finally/finalize的区别