在Lambda表达式中命名线程

时间:2017-03-23 11:51:14

标签: java multithreading lambda

我尝试将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();

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

new Thread("nameHere",() ->{....}).start();

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

1 个答案:

答案 0 :(得分:4)

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

来调用它
new Thread(() ->{....},"nameHere").start();
  

<强> public Thread(Runnable target, String name)

     

分配新的Thread对象。这个构造函数具有相同的效果   Thread (null, target, name)

     

参数:
target - run的对象   启动此线程时调用方法。如果null,这个帖子就是   调用run方法。
name - 的名称   新线程

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