java学习初探十八之线程的调度与控制_sleep

来源:互联网 发布:Linux xmonad 编辑:程序博客网 时间:2024/06/07 02:30

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;            }        }    }}
原创粉丝点击