您的位置:首页 > 编程语言 > Java开发

java多线程之(sleep)

2016-01-21 20:26 471 查看
java的Thread.sleep()相当于让线程睡眠,交出CPU,让CPU去执行其他的任务。 但是有一点要非常注意,sleep方法不会释放锁,也就是说如果当前线程持有对某个对象的锁,则即使调用sleep方法,其他线程也无法访问这个对象。看下面这个例子就清楚了:

package nc.com.thread.traditional.example;
/**
* @ClassName: TestSleep
* @Description: TODO(这里用一句话描述这个类的作用)
* @author A18ccms a18ccms_gmail_com
* @date 2015-12-19 下午06:41:58
*
*/
public class TestSleep {

private int i = 10;
private Object object = new Object();
public static void main(String[] args) throws Exception  {
TestSleep test = new TestSleep();
MyThread thread1 = test.new MyThread();
MyThread thread2 = test.new MyThread();
thread1.start();
thread2.start();
}

class MyThread extends Thread{
@Override
public void run() {
//只要有一个线程获得了对象锁,则在当获得线程锁的线程sleep时,其他线程不能获取对象锁,只能一直等待
synchronized (object) {
i++;
System.out.println("i:"+i);
try {
System.out.println("线程"+Thread.currentThread().getName()+"进入睡眠状态");
Thread.currentThread().sleep(10000);
} catch (InterruptedException e) {
// TODO: handle exception
}
System.out.println("线程"+Thread.currentThread().getName()+"睡眠结束");
i++;
System.out.println("i:"+i);
}
}
}
}


输出:

i:11

线程Thread-0进入睡眠状态

线程Thread-0睡眠结束

i:12

i:13

线程Thread-1进入睡眠状态

线程Thread-1睡眠结束

i:14

解释:当线程Thread-0获得对象锁并进入sleep时,线程Thread-1只能等待线程Thread-0执行完成后才能获取对象锁继续执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: