java学习初探十八之线程的调度与控制_sleep

本文详细介绍了Java中Thread.sleep()方法的基本用法,包括如何阻塞当前线程及释放CPU资源,通过示例展示了静态方法调用的特点,并探讨了如何通过interrupt方法打断休眠状态的线程以及优雅地终止线程的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.sleep基本用法

package ThreadTest;
/*
    1.Thread.sleep(毫秒)
    2.sleep方法是一个静态方法
    3.该方法作用是阻塞当前线程,腾出cpu,让给其他线程
 */
public class ThreadTest6 {
    public static void main(String[] args) {
        Thread t1=new MyThread();
        t1.setName("t1");
        t1.start();

    }
}
class MyThread extends Thread{
    //Thread方法中run不抛出异常,所以重写run方法之后,在run方法的声明位置不能使用throws
    //所以run方法中的异常只能try catch
    public void run() {
        try {
            for(int i=0;i<10;i++) {
            System.out.println(Thread.currentThread().getName()+"---->"+i);
            Thread.sleep(1000);//当前线程阻塞1秒
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

2.关于sleep的一个面试题,主要考察静态方法的调用

package ThreadTest;
/*
    面试题
 */
public class ThreadTest7 {
    public static void main(String[] args) throws InterruptedException {
        Thread t=new process();
        t.setName("t");
        t.start();
        //休眠
        //Thread.sleep(5000);
        t.sleep(5000);//实际阻塞的是主线程。等价于Thread.sleep(5000)。
        System.out.println("HelloMyworld");//5秒后输出
    }
}
class process extends Thread{
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+"--->"+i);
        }
    }
}

3.interrupt打断休眠

package ThreadTest;
/*
    某线程正在休眠,如何打断它的休眠
    t.interrupt,依靠的是异常处理机制
 */
public class ThreadTest8 {

    public static void main(String[] args) throws InterruptedException {
        //需求:启动线程后,5秒后打断线程的休眠
        Thread t=new Thread(new proccessortest());
        t.setName("t");
        t.start();

        //5s之后
        Thread.sleep(5000);

        //打断t的休眠
        t.interrupt();
    }
}
class proccessortest implements Runnable{
    public void run() {
        try {
            Thread.sleep(100000000);//interrupt后,发生异常
        } catch (InterruptedException e) {
            //e.printStackTrace();
        }

        for(int i=0;i<10;i++) {
            System.out.println(Thread.currentThread().getName()+"--->"+i);
        }

    }
}

4.线程的终止

package ThreadTest;
/*
    如何正确的更好的终止一个正在执行的线程。
    需求:线程启动5s后终止
 */
public class ThreadTest9 {

    public static void main(String[] args) throws InterruptedException {
        ProccessTest p= new ProccessTest();
        Thread t=new Thread(p);
        t.setName("t");
        t.start();
        //5s
        Thread.sleep(5000);
        //终止
        p.run=false;
    }
}
class ProccessTest implements Runnable{
    boolean run=true;
    public void run() {
        for(int i=0;i<10;i++) {
            if(run) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println(Thread.currentThread().getName()+"--->"+i);
            }else {
                return;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值