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