中断线程的休眠/睡眠

尝试一下中断线程的睡眠,这个其实很好用,就假设某个线程在做事,做完了让他等着,然后当另一个线程触发某个条件,就会唤醒这个睡眠的线程。程序例子如下。

package ProcessAndThread.thread;

/**
 * sleep()睡眠太久了,如果希望半道醒来,你应该怎么办?也就是说怎么叫醒一个正在睡眠的线程呢?
 * 注意:这个不是终断线程的执行,是终止线程的睡眠
 */
public class ThreadTest {
    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.setName("t");
        thread.start();
        //我们可以设定条件,这里假设就算是5s后叫t起来
        try {
            Thread.sleep(1000 * 5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //中断t线程的睡眠,注意这种方式靠的是Java异常处理机制,会让t的睡眠语句块进入catch
        thread.interrupt();
    }
}
class MyRunnable implements Runnable {

    /**
     * 注意:run()方法中的异常不能throws,只能try...catch
     * 因为run()方法在父类中没有抛出任何异常,子类不能比父类抛出更多的异常
     */
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "--->begin");
        //睡眠一年
        try {
            Thread.sleep(1000 * 60 * 60 * 24 * 365);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + "--->end");
        try {
            doSome();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 其他方法是可以throws的,只不过对于run()里而言,还是只能try..catch
     * @throws Exception
     */
    public void doSome() throws Exception {

    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值