sleep()与interrupt()
sleep():1)sleep是Thread类的静态方法(Thread.sleep(1000),让线程指定时间休眠,进入阻塞状态。 简单代码: public class Threaddemo { public static void main(String[] args) { Runner2 r = new Runner2(); //启动线程 r.start(); //主线程会休眠10秒钟再执行以下的程序,在休眠的过程中r线程每隔1秒打印一次,10秒之后,调用了r的interript,这时r线程抛出InterruptedException异常,return。 try { Thread.sleep(10000); }catch (InterruptedException e) { } //中断线程 r.interrupt(); } } class Runner2 extends Thread{ public void run() { while (true) { System.out.println("------"); /** * sleep必须捕获异常 * sleep()必须捕获异常,在sleep的过程中过程中有可能被其他对象调用它的interrupt(),* 产生InterruptedException异常,如果你的程序不捕获这个异常,线程就会异常终止, * 进入TERMINATED状态,如果你的程序捕获了这个异常, * 那么程序就会继续执行catch语句块(可能还有finally语句块)以及以后的代码。 */ try { Thread.sleep(1000); }catch (InterruptedException e) { return; } } } } interrupt()1)首先要强调的是,interrupt()方法被调用后,不会立即中断当前的线程,需要自己去监听中断状态,这个中断状态是通过InterruptedException抛出异常来监听的,当线程调用interrupt()方法,该线程就会捕获异常,这时就处于中断状态,这样受阻塞的线程就会推出阻塞状态,中断当前线程。例如以上程序,当主线程调用了r.interrupt(),这时线程并没有结束,r线程会抛出InterruptedException异常,然后中断线程。 其他中断方法1)正常中断,线程按照正常逻辑走完,也就停止了线程。 2)stop强制停止,Thread.stop(),立即停止,但是可能会导致数据不同步,资源得不到回收等问题,所以已经被弃用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |