java 使用匿名内部类的方式创建线程并设置和获取线程名字

有些方法需要传入接口的实例或者抽象类的实例对象,比如Thread有一个构造方法,Thread(Runnable target)

这时可以可以自定义类实现Runnable接口,重写接口中的方法,将自定义类的对象传入构造方法中

也可以使用匿名内部类,即在创建Thread对象时传入Runnable接口,在其后面重写接口的方法

这篇文章介绍下使用匿名内部类创建三个线程

package createThreads;

import java.util.concurrent.*;

public class anoymousThreadTest01 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //使用匿名内部类创建Thread对象,1
        new Thread(){
            @Override
            public void run() {
               System.out.println("hello world 1");
            }
        }.start();
        //2
        Thread t1=new Thread(){
            @Override
            public void run() {
                System.out.println( "hello world 2");
            }
        };
        t1.start();
        //使用匿名内部类创建Runnable接口实例,创建线程1
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println( "你好,世界 2");
            }
        }).start();
        //2
        Thread t2=new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println( "你好,世界 2");
            }
        });
        t2.start();
        //使用匿名内部类创建Callable接口实例,创建线程
        ExecutorService es= Executors.newFixedThreadPool(2);//创建线程池
        Future<Integer> f=es.submit(new Callable<Integer>() { //创建Callable接口实例,重写call方法,放入线程池
            @Override
            public Integer call() {
                return 3*5;
            }
        });
        System.out.println( f.get());      //输出返回的结果
        es.shutdown();                      //关闭线程池
    }
}
out:
你好,世界 2
hello world 1
你好,世界 2
hello world 2
15

获取名字和设置名字的三种方式,以Thread为例,获取当前线程对象可以试用Thread类的静态方法currentThread()

public class anoymousThreadTest02 {
    public static void main(String[] args){
        //设置线程名字,1利用Thread类的setName方法
        Thread t1=new Thread(){
            @Override
            public void run() {
                System.out.println( "线程t1的名字是: "+this.getName());
            }
        };
        t1.setName("线程t1");
        //2,在Thread类的构造方法中传入名字
        Thread t2=new Thread("线程t2"){
            @Override
            public void run() {
                System.out.println( "线程t2的名字是: "+getName());
            }
        };
        //3,在run方法体中使用Thread类的setName方法
        Thread t3=new Thread(){
            @Override
            public void run() {
                this.setName("线程t3");
                System.out.println( "线程t3的名字是: "+this.getName());
            }
        };
        t3.start();
        t1.start();
        t2.start();

        //  获取当前线程对象,利用Thread中的currentThread方法
        //Runnable接口中的run方法无法直接利用getName方法,可先获取当前对象,再利用Thread类的getName方法获取当前线程名字
        Thread t4=new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println( "线程t4的名字是: "+Thread.currentThread().getName());
            }
        },"线程t4");
        t4.start();
        //不设置线程名字,系统会默认为线程命名
        Thread t5=new Thread(){
            @Override
            public void run() {
                System.out.println( "线程t5的名字是: "+getName());
            }
        };
        t5.start();
        //设置main方法的线程名字并打印
        Thread.currentThread().setName("main方法");
        System.out.println( "main方法的线程名字是: "+Thread.currentThread().getName());
        
    }
}

参考:http://www.monkey1024.com/javase/658

猜你喜欢

转载自blog.csdn.net/sinat_41132860/article/details/84451431