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;}

}
}
}

猜你喜欢

转载自blog.csdn.net/rolic_/article/details/80733184