Thread的run方法怎么写

img

img
想练习一下,但run方法那个箭头不知道怎么写,有没有别的方法能实现图中run方法的

你要定义一个行程类继承Thread或实现Runnable接口,再重写里面的run方法。

图1中的箭头应该是IDE把lambda表达式折叠起来了,所以我建议你学习一下匿名函数,这是java8就支持的特性,会很常见。
代码的简化有一条非常清晰的逻辑,建议你按照这条线学习:外部类(基础写法)->内部类->匿名内部类->lambda表达式
首先是基础写法,继承Thread类,并在使用时实例化该Thread类,通过调用start方法来产生线程并让线程执行Thread类中的run方法。
同时,Thread的构造函数也支持传入一个Runnable接口的示例来创建Thread:

class MyThread implements Runnable {
    @Override
    public void run() {
        System.out.println("MyThread run.");
    }
}

class Test {
    public static void main(String[] args) {
        Thread thread = new Thread(new MyThread());
        thread.start();
    }
}

实际上,MyThread类和Test类密切相关,并且只有在Test类运行时才需要调用MyThread类,所以可以利用java内部类的特性简化上述代码。java中内部类共有4种,不算匿名类还有3种,这里只采用静态内部类的写法:

class Test {
    private static class MyThread implements Runnable {
        @Override
        public void run() {
            System.out.println("MyThread run.");
        }
    }
    
    public static void main(String[] args) {
        Thread thread = new Thread(new MyThread());
        thread.start();
    }
}

当程序中只有一处地方需要使用内部类时,可以使用java提供的匿名内部类特性来简化内部类的编写:

class Test {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable(){
            @Override
            public void run() {
                System.out.println("MyThread run.");
            }
        });
        thread.start();
    }
}

java支持lambda函数特性,其中lambda表达式可以用来实例化只有一个函数的接口。所以可以用lambda表达式简化至如下:

class Test {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> System.out.println("MyThread run."));
        thread.start();
    }
}