Java_基础—多线程(匿名内部类实现线程的两种方式和设置名字的方法)

一、为什么要使用匿名内部类来实现多线程?

好处:不需要另找一个类来继承Thread类和实现Runnable接口啦,只需要new Thread()或者new Runnable() 后,重写里面的run()方法就可以了。

package com.soar.thread;

public class Demo4_Thread {


    public static void main(String[] args) {
        //匿名内部类通过Thread开启多线程
        new Thread(){                               //1.继承Thread类
            public void run(){                      //2.重写run()方法
                for(int i=0; i<100; i++){           //3.将要执行的代码写在run()方法中
                    System.out.println("aaaaaaa");
                }
            }
        }.start();                                  //4.开启线程


        //匿名内部类通过Runna开启多线程
        new Thread(new Runnable(){                  //1.将Runnable的之类对象传递给Thread的构造方法
            public void run(){                      //2.重写run()方法
                for(int i=0; i<100; i++){           //3.将要执行的代码写在run()方法中
                    System.out.println("bb");
                }
            }
        }).start();                                 //4.开启线程

    }

}

二、为线程设置名字的两种方式

  1. 通过参数设置名字
  2. 通过调用setName来设置名字
package com.soar.threadmethod;

public class Demo1_Name {

    public static void main(String[] args) {
        //argsSetName();    //通过传入参数,给线程改名


        Thread t1 = new Thread(){
            public void run(){
                //this.setName("张三");
                System.out.println(this.getName()+"   aaaaa");  //张三   aaaaa
            }
        };

        Thread t2 = new Thread(){
            public void run(){
                //this.setName("李四");
                System.out.println(this.getName()+"   bb");     //李四   bb
            }
        };

        t1.setName("张三");
        t2.setName("李四");
        t1.start();             //张三   aaaaa
        t2.start();             //李四   bb
    }


    //通过传入参数,给线程改名
    public static void argsSetName() {
        new Thread("高飞"){
            public void run(){
                System.out.println(this.getName()+"    aaaa");  //高飞    aaaa
            }
        }.start();

        new Thread("高飞飞"){
            public void run(){
                System.out.println(this.getName()+"    bb");    //高飞飞    bb
            }
        }.start();
    }

}

三、获取当前线程的对象

在匿名Runnable中通过使用
Thread.currentThread(), 主线程也可以获取

package com.soar.threadmethod;

public class Demo2_CurrentThread {

    public static void main(String[] args) {

        new Thread(){
            public void run(){
                System.out.println(getName()+"   aaaa");    //Thread-0   aaaa
            }
        }.start();

        new Thread(new Runnable(){
            public void run(){
                //Thread.currentThread()获取当前正在执行的线程
                System.out.println(Thread.currentThread().getName()+"  bb");    //Thread-1  bb
            }
        }).start();

        //System.out.println(Thread.currentThread().getName()); //main
        Thread.currentThread().setName("我是主线程");
        System.out.println(Thread.currentThread().getName());   //我是主线程
    }

}
posted @ 2017-09-02 13:22  Soar_Sir  阅读(397)  评论(0编辑  收藏  举报