线程(3)--线程中的方法setName(),getName(),sleep(),daemon(),join(),yield()等

1.获取线程名、设置线程名

package com.fenqing.duoxiancheng;

public class d4_threadMethod {

    public static void main(String[] args) {
        /*
         * 通过构造函数可以传入String类型的名字
         * 通过getName()方法获取线程对象的名字
         */
        new Thread("1---"){
            public void run(){
                System.out.println(this.getName()+"11111111111111111111");
            }
        }.start();

        new Thread("2---"){
            public void run(){
                System.out.println(this.getName()+"2222222222222222222");
            }
        }.start();
        /*
         * 通过setName(String)方法可以设置线程对象的名字
         */
        Thread t1=new Thread(){
            public void run(){
                System.out.println(this.getName()+"3333333333333333333333333");
            }
        };
        t1.setName("3---");     //设置线程名
        t1.start();             //最后不要忘记调用start()方法
        //或者可以这样写:
        new Thread(){
            public void run(){
                this.setName("4---");
                System.out.println(this.getName()+"4444444444444444444444444");
            }
        }.start();;

    }

}

2.抓获正在执行的线程对象

package com.fenqing.duoxiancheng;

public class d5_currentThread {

    public static void main(String[] args) {
        new Thread(){
            public void run(){
                System.out.println("aaaaaaa");
            }
        }.start();

        new Thread(new Runnable(){

            @Override
            public void run() {
                //Thread.currentThread()获取当前正在执行的线程(对象)
                System.out.println(Thread.currentThread().getName()+"bbbbbbb");
            }

        }).start();

        Thread.currentThread().setName("这是主线程哦");
        System.out.println(Thread.currentThread().getName()); //获取主线程的线程名
    }

}

3.sleep休眠线程

package com.fenqing.duoxiancheng;

public class d6_sleepMothod {
    /*
     * sleep() 是静态方法,可以直接调用,Thread.sleep()
     * sleep(参数1,参数2)  参数1表示毫秒,参数2表示纳秒,一般情况下不用纳秒,只用一个参数。
     * 程序执行时会等待参数1的时间间隔再继续执行程序。
     * 使用时,会出现中断异常,抛出即可
     */
    public static void main(String[] args) {
        new Thread(){
            public void run(){
                for(int i=0;i<100;i++){
                    System.out.println("线程"+this.getName()+"执行了"+(i+1)+"次");
                    try {
                        Thread.sleep(1000);         //1000毫秒=1秒
                    } catch (InterruptedException ie) {
                        ie.printStackTrace();
                    }
                }

            }
        }.start();
    }

}

4.setDaemon()设置守护线程

设置一个线程为守护线程, 该线程不会单独执行, 当其他非守护线程都执行结束后, 自动也结束了

package com.fenqing.duoxiancheng;

public class d7_daemonMethod {
    public static void main(String[] args) {
        Thread t1=new Thread(){
            public void run(){
                for(int i=1;i<11;i++){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(getName()+"执行了"+i+"次");
                }
            }
        };

        Thread t2=new Thread(){
            public void run(){
                for(int i=1;i<21;i++){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(getName()+"执行了"+i+"次");
                    }
        };

        t2.setDaemon(true);     //设置t2为守护线程,当t1结束,t2也结束了,
                                //但是有时候会因为有时间缓冲,所以当t1结束时,t2的某些语句也会出现在控制台上
        t1.start();
        t2.start();
    }
}

5.join加入线程

相当于插队。

package com.fenqing.duoxiancheng;

public class d8_join {
    /*
     * join(), 当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续
     * join(int), 可以等待指定的毫秒之后继续
     */
    public static void main(String[] args) {
        final Thread t1=new Thread(){
            public void run(){
                for(int i=1;i<11;i++){
                    System.out.println(this.getName()+"执行了"+i+"次"); 
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };

        Thread t2=new Thread(){
            public void run(){
                for(int i=1;i<21;i++){
                    if(i==6){
                        try {
                            //t1.join();        //不设置时间,就要等t1全部执行完
                            t1.join(50);        //设置插队的时间50ms,
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    System.out.println(this.getName()+"执行了");

                }
            }
        };

        t1.start();
        t2.start();
    }
}

6.礼让线程

package com.fenqing.duoxiancheng;

public class d9_yield {
    /*
     * 让出cpu让别的线程做
     */
    public static void main(String[] args) {
        myThread m1=new myThread();
        m1.start();

        new myThread().start();     //定义两个线程
    }

}
class myThread extends Thread{
    public void run(){
        for(int i=0;i<100;i++){
            if(i%10==0){
                Thread.yield();     //当条件满足时,礼让
            }
            System.out.println(this.getName()+"——————"+(i+1));  //否则打印
        }
    }
}

礼让线程结果:
线程(3)--线程中的方法setName(),getName(),sleep(),daemon(),join(),yield()等_第1张图片

你可能感兴趣的:(线程,多线程,java,java--多线程)