Lambda 表达式中的命名线程

Tum*_*xie 1 java lambda multithreading

我尝试将 name 参数与 Lambda 表达式一起传递,但无法使其工作。我解决的方法是这样的:

        Thread t1 = new Thread(() ->{
        try {
            Desktop.getDesktop().browse(new URI("http://www.google.com"));
        }catch (IOException e){
            e.printStackTrace();
        }catch (URISyntaxException e){
            e.printStackTrace();
        }
    }
    );
    t1.setName("Internet Browser");
    t1.start();
Run Code Online (Sandbox Code Playgroud)

有办法吗?我可以写在一行中

new Thread("nameHere",() ->{....}).start();
Run Code Online (Sandbox Code Playgroud)

如果没有,为什么不可能?

Wil*_*sem 6

是的,你有public Thread(Runnable target, String name)构造函数。所以你可以调用它:

new Thread(() ->{....},"nameHere").start();
Run Code Online (Sandbox Code Playgroud)

public Thread(Runnable target, String name)

分配一个新Thread对象。此构造函数与 Thread (null, target, name).

参数:
   target-run 启动此线程时调用其方法的对象。如果nullrun则调用此线程的 方法。
   name- 新线程的名称

所以顺序不同(可在名称之前运行)。但我想这只是一个细节?