Thread的Sleep方法详解,
1.Thread.sleep(毫秒)
2.sleep方法是一个静态方法
3.该方法的作用:阻塞该线程,让给其他线程
*/
public class fuck4 {
public static void main(String[] args) throws InterruptedException{
Thread t1=new professor();
t1.setName("t1");
t1.start();
//阻塞主线程
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
Thread.sleep(500);
}
}
}
class professor extends Thread{//Thread中的run方法不抛出异常,所以重写run方法后,在run方法的声明位置上不能使用throw
//必须使用try catch
public void run(){
for(int i=0;i<50;i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
//m1();
}
//public static void m1 throws Exception(){}//m1可以抛出异常
}
/* 面试题 */ public class fuck5 { public static void main(String[] args) throws InterruptedException{ //创建线程 Thread t=new processor(); t.setName("t"); //启动线程 t.start(); //休眠 t.sleep(5000);//等同于Thread.sleep(5000).阻塞的还是当前线程,和t线程无关 System.out.println("hello java"); A a=null; a.m1();//不会报空指针异常,空指针异常是指空指针指向对象,m1为静态方法,不是对象 } } class processor extends Thread{ public void run(){ for(int i=0;i<10;i++){ System.out.println(Thread.currentThread().getName()+"--->"+i); } } } class A{ public static void m1(){}
}
/* 某线程正在休眠,如何打断它的休眠 以下方法依靠的是异常处理机制 */ public class fuck6{ public static void main(String[] args) throws InterruptedException{ Thread t=new Thread(new processor()); t.setName("t"); t.start(); //5s之后终止 Thread.sleep(5000); //打断t的休眠 t.interrupt(); } } class processor implements Runnable{ public void run(){ try{ Thread.sleep(1000000); System.out.println("heetian");} catch(InterruptedException e){ e.printStackTrace();} for(int i=0;i<10;i++){ System.out.println(Thread.currentThread().getName()+"--->"+i); } }
}
/* 如何正确更好的终止一个正在执行的线程 需求:线程启动5s之后终止 */ public class fuck7{ public static void main(String[] args) throws InterruptedException{ processor p=new processor(); Thread t=new Thread(p); t.setName("t"); t.start(); //5s之后终止 Thread.sleep(5000); //终止 p.run=false; //因为线程是同时运行的,主线程和t线程同时运行,主线程5秒后run变成false, //这时t线程刚好输出五个数,但已经不满足run=true条件,所以就终止了,究极原因是线程是同时运行的 } } class processor 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;} } } }