Java_基础—设置休眠/守护/插队/礼让/优先级线程

来源:互联网 发布:面包板入门单片机 编辑:程序博客网 时间:2024/06/10 00:30

一、休眠线程(Sleep)

Thread.sleep(毫秒), 控制当前线程休眠若干毫秒
1秒= 1000毫秒
1秒 = 1000 * 1000 * 1000纳秒 1000000000

package com.soar.threadmethod;public class Demo3_Sleep {    public static void main(String[] args) {        //demo1();        new Thread(){            public void run(){                for(int i = 0; i<10; i++){                    try {                        Thread.sleep(100);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    System.out.println(getName()+"   aaaaa");                }            }        }.start();        new Thread(){            public void run(){                for(int i = 0; i<10; i++){                    try {                        Thread.sleep(100);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    System.out.println(getName()+"   bb");                }            }        }.start();    }    public static void demo1() throws InterruptedException {        for (int i = 20; i >=0; i--) {            Thread.sleep(1000);            System.out.println("倒计时第:"+i+"秒");        }    }}

二、守护线程(setDaemon)

setDaemon(), 设置一个线程为守护线程, 该线程不会单独执行, 当其他非守护线程都执行结束后, 自动退出

package com.soar.threadmethod;public class Demo4_Daemon {    /*     * 守护线程     */    public static void main(String[] args) {        Thread t1= new Thread(){            public void run(){                for(int i=0; i<2; i++){                    System.out.println(getName()+"   aaaaaa");                }            }        };        Thread t2= new Thread(){            public void run(){                for(int i=0; i<50; i++){                    System.out.println(getName()+"   bb");                }            }        };        t2.setDaemon(true);         //但传入true就是意味着设置为守护线程        t1.start();        t2.start();    }}

Console:

Thread-0   aaaaaaThread-0   aaaaaaThread-1   bbThread-1   bbThread-1   bb

当t1执行完结束后,t2不会立马退出,有一段缓冲的时间。

三、加入(插队)线程(join)

join(), 当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续
join(int), 可以等待指定的毫秒之后继续

package com.soar.threadmethod;public class Demo5_Join {    /*     * join(), 当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续     * join(int), 可以等待指定的毫秒之后继续     * 插队     */    public static void main(String[] args) {        final Thread t1 = new Thread(){            public void run(){                for(int i=0; i<10; i++){                    System.out.println(getName()+"    aaaaaaa");                }            }        };        Thread t2 = new Thread(){            public void run(){                for(int i=0; i<10; i++){                    if(i==2){                        try {                            //t1.join();                            t1.join(1);     //传入的参数代表的是插队的时间,过了指定的时间后,两条线程交替执行                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                    System.out.println(getName()+"    bb");                }            }        };        t1.start();        t2.start();    }}

Console:

Thread-1    bbThread-0    aaaaaaaThread-1    bbThread-0    aaaaaaaThread-0    aaaaaaaThread-0    aaaaaaaThread-0    aaaaaaaThread-0    aaaaaaaThread-0    aaaaaaaThread-0    aaaaaaaThread-0    aaaaaaaThread-0    aaaaaaaThread-1    bbThread-1    bbThread-1    bbThread-1    bbThread-1    bbThread-1    bbThread-1    bbThread-1    bb

四、礼让线程(yield)(了解)

yield让出cpu

package com.soar.threadmethod;public class Demo6_Yield {    /*     * 礼让线程     * yield让出cpu     */    public static void main(String[] args) {        new MyThread().start();        new MyThread().start();    }}class MyThread extends Thread{    public void run(){        for(int i=1; i<1000; i++){            if(i%10 == 0){                Thread.yield();         //让出CPU            }            System.out.println(getName()+"。。。"+i);        }    }}

五、设置优先级线程(setPriority)(了解)

setPriority()设置线程的优先级

package com.soar.threadmethod;public class Demo7_Priority {    /*     * setPriority()设置线程的优先级     */    public static void main(String[] args) {        Thread t1 = new Thread(){            public void run(){                for(int i=0; i<100; i++){                    System.out.println(getName()+"    aaaaa");                }            }        };        Thread t2 = new Thread(){            public void run(){                for(int i=0; i<100; i++){                    System.out.println(getName()+"    aaaaa");                }            }        };        t1.setPriority(Thread.MIN_PRIORITY);    //设置最小的线程优先级        t2.setPriority(Thread.MAX_PRIORITY);    //设置最大的线程优先级        t1.start();        t2.start();    }}
阅读全文
0 0
原创粉丝点击