Java中wait方法和sleep方法的不同之处
1.考察目标
- wait方法和sleep方法的使用区别
- wait方法和sleep方法的原理区别
2.题目分析
-
wait和sleep的基本使用
- wait:此方法来自于Object类,必须由锁对象进行调用
- sleep:此方法来自于Thread类,是Thread类的静态方法,可以类名点调用
-
wait方法和sleep方法的原理对比
-
案例1:每隔一秒输出一句HelloWorld
- sleep代码
private static coid sleepMethod() throws InterruptedException{ for(int i = 1; i <= 5; i++){ Thread.sleep(1000); System.out.println("HelloWorld"); } }
sleep:让当前程序休眠xxx毫秒,休眠之后,程序继续运行
-
wait代码
public static synchronized void watiMethod() throws InterruptedException{ for(int i =1;i <=5; i++){ Demo1_Thread.class.wait(1000); System.out.printLn("HelloWorld"); } }
wait:如果使用的wait方法是传入毫秒值参数的,产生的效果与sleep方法类似,
但是wait方法较为麻烦一点
问题:哪里麻烦了?
wait方法必须由锁对象调用,锁对象还必须存放在同步当中。
-
案例2:两条线程交替打印(“哈哈”)(“呵呵”)
-
总结:
-
wait方法:
-
空参数:会让线程进入无限等待状态,进入了无限等待状态后,必须由notify方法对其进行唤醒
- 重点:
- wait方法在等待的过程中,施放锁对象
- sleep方法在休眠的过程中,不会施放锁对象
- 重点:
-
有参数的:效果跟sleep方法类似
-
-
-
3.问题扩展
- notify方法与notifyAll方法的对比
- notify:随机唤醒单个线程
- notifyAll:唤醒所有等待的线程
4.应用场景
- 通过wait方法和notify方法的配合使用。我们可以实现线程之间的简单线程通讯
- 例如:控制台各打印一句(hello)(hi)