📄 sleepandwait.java
字号:
package thread.lock;
/**
* <p>Title: </p>
*
* <p>Description: wait方法与sleep方法的使用和区别</p>
*
* <p>Copyright: Copyright (c) 2004</p>
*
* <p>Company: netsky</p>
*
* @author wdz123@hotmail.com
* @version 1.0
*/
public class SleepAndWait {
private Object lock;
private static Object staticLock =new Object();
public SleepAndWait() {
}
/**
* 在一个方法中使用sleep方法。只是让cpu停止运行当前代码若干时间
* **/
public void doItA() {
//处理一堆事情
//....
//当前线程睡眠2秒钟,和对象锁、类锁是没有关联的,不存在锁的释放,获取的事情
try {
Thread.sleep(2000);
}
catch (Exception ex) {
}
//处理另外一堆事情
//....
}
/***
* 在同步方法/代码块中,sleep方法的使用。Thread.sleep方法本身是和锁的获取释放没有任何关系的
* **/
public void doItB() {
synchronized (lock) {
//处理一堆事情
//....
//当前线程睡眠2秒钟,但是这期间,持有的对象锁(lock)是不会释放的
try {
Thread.sleep(2000);
}
catch (Exception ex) {
}
//处理另外一堆事情
//....
}
}
/**
* 使用wait方法.这个方法和doItD方法效果一样
* **/
public void doItC() {
synchronized (lock) {
//处理一堆事情
//....
//当前代码释放持有的对象锁,然后停止运行2秒钟,
try {
wait(2000);
}
catch (Exception ex) {
}
//当程序返回运行wait方法结束后,重新获取对象锁
///处理其他一些事情
//......
}
}
/**
* doItC同样效果的代码
* **/
public void doItD() {
synchronized (lock) {
//处理一堆事情
//....
}
//当前代码释放持有的对象锁,然后停止运行2秒钟,
try {
Thread.sleep(2000);
notify();
}
catch (Exception ex) {
}
//当程序重新获取对象锁
synchronized (lock) {
///处理其他一些事情
//......
}
}
/**
* 在类方法中使用wait方法
* **/
public static void doItE(){
synchronized(staticLock){
//处理一堆事情
//....
try {
staticLock.wait();
}
catch (Exception ex) {
}
///处理其他一些事情
//......
}
}
public static void main(String[] args) {
SleepAndWait sleepandwait = new SleepAndWait();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -