1.sleep基本用法
package ThreadTest;
/*
1.Thread.sleep(毫秒)
2.sleep方法是一个静态方法
3.该方法作用是阻塞当前线程,腾出cpu,让给其他线程
*/
public class ThreadTest6 {
public static void main(String[] args) {
Thread t1=new MyThread();
t1.setName("t1");
t1.start();
}
}
class MyThread extends Thread{
//Thread方法中run不抛出异常,所以重写run方法之后,在run方法的声明位置不能使用throws
//所以run方法中的异常只能try catch
public void run() {
try {
for(int i=0;i<10;i++) {
System.out.println(Thread.currentThread().getName()+"---->"+i);
Thread.sleep(1000);//当前线程阻塞1秒
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
2.关于sleep的一个面试题,主要考察静态方法的调用
package ThreadTest;
/*
面试题
*/
public class ThreadTest7 {
public static void main(String[] args) throws InterruptedException {
Thread t=new process();
t.setName("t");
t.start();
//休眠
//Thread.sleep(5000);
t.sleep(5000);//实际阻塞的是主线程。等价于Thread.sleep(5000)。
System.out.println("HelloMyworld");//5秒后输出
}
}
class process extends Thread{
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"--->"+i);
}
}
}
3.interrupt打断休眠
package ThreadTest;
/*
某线程正在休眠,如何打断它的休眠
t.interrupt,依靠的是异常处理机制
*/
public class ThreadTest8 {
public static void main(String[] args) throws InterruptedException {
//需求:启动线程后,5秒后打断线程的休眠
Thread t=new Thread(new proccessortest());
t.setName("t");
t.start();
//5s之后
Thread.sleep(5000);
//打断t的休眠
t.interrupt();
}
}
class proccessortest implements Runnable{
public void run() {
try {
Thread.sleep(100000000);//interrupt后,发生异常
} catch (InterruptedException e) {
//e.printStackTrace();
}
for(int i=0;i<10;i++) {
System.out.println(Thread.currentThread().getName()+"--->"+i);
}
}
}
4.线程的终止
package ThreadTest;
/*
如何正确的更好的终止一个正在执行的线程。
需求:线程启动5s后终止
*/
public class ThreadTest9 {
public static void main(String[] args) throws InterruptedException {
ProccessTest p= new ProccessTest();
Thread t=new Thread(p);
t.setName("t");
t.start();
//5s
Thread.sleep(5000);
//终止
p.run=false;
}
}
class ProccessTest 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;
}
}
}
}