创建Thread对象时设置线程的名称?

时间:2012-01-17 09:16:37

标签: java

我是Java的新手。任何人都可以解释主方法中发生了什么吗?

class Demo {
    public static void main(String []args) {
        //setting a name using the constructor
        Thread t=new Thread("main"){
            //what is this? a static block?? need an explanation to this.
            {setName("DemoThread");} 
        };
        //output is DemoThread. Since it set the name again.
        System.out.println(t.getName());
    }
}

3 个答案:

答案 0 :(得分:7)

这一行:

{setName("DemoThread");}

称为初始化块(或实例初始化块)。它看起来像一个静态初始化程序块,但没有static关键字。它对匿名类很有用,因为它们不能有命名构造函数。可以找到更多详细信息here

答案 1 :(得分:2)

Thread t = new Thread("main") {
    {
        setName("DemoThread");
    } 
};

以上是正在创建的匿名内部类。 {}是Java中的实例初始化程序块。如果它有static { },它将是一个静态块。

基本上,您可以从属于实例(this)引用的实例初始化程序块调用任何操作。

在这种情况下,它会在setName的当前实例上调用Thread

答案 2 :(得分:1)

代码正在创建一个带有

的匿名Thread子类
new Thread("main") {

};

在这个匿名类中,有一个初始化块:

{setName("DemoThread");}