Thread的sleep()方法

发布时间 2023-05-17 15:46:13作者: 我的心儿

sleep() 是Thread类中的一个静态方法,当调用sleep方法后,调用线程会暂时让出cup的执行权,但不会释放锁资源。到了指定时间睡眠之后,线程处于就绪状态,参与cup调度,获取cup执行权继续执行。

点击查看代码
package cn.tencent.data.ext.service.handler.common;
import java.util.concurrent.locks.ReentrantLock;
public class test {
    public static void main(String[] args) {

        ReentrantLock lock = new ReentrantLock(false);

        Thread threadA = new Thread(new Runnable() {
            @Override
            public void run() {
                lock.lock();
                try {
                    //log.info(Thread.currentThread().getName()+"begin sleep");
                    System.out.println(Thread.currentThread().getName()+"begin sleep");
                    Thread.sleep(5000);
                    System.out.println(Thread.currentThread().getName()+"over sleep");
                    //log.info(Thread.currentThread().getName()+"over sleep");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally {
                    lock.unlock();
                }
            }
        }, "ThreadA");


        Thread threadB = new Thread(new Runnable() {
            @Override
            public void run() {
                lock.lock();
                try {
                   // log.info(Thread.currentThread().getName()+"begin sleep");
                    System.out.println(Thread.currentThread().getName()+"begin sleep");
                    Thread.sleep(5000);
                    System.out.println(Thread.currentThread().getName()+"over sleep");
                   // log.info(Thread.currentThread().getName()+"over sleep");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally {
                    lock.unlock();
                }
            }
        }, "ThreadB");

        threadA.start();
        threadB.start();
    }
}

 
多次运行结果:
ThreadAbegin sleep
ThreadAover sleep
ThreadBbegin sleep
ThreadBover sleep

总结:通过运行结果可以发下,只有等待线程A完全释放了锁,线程B才能获取到锁,这里也证明了sleep()方法不会释放锁资源