請教各位大哥大姐,是否碰到這樣的用法,Thread t1 = new Thread(){};
new一個线程,后面用大括号,里面还可以写方法,小弟百思不得其解,请大家帮忙指点,不胜感激!
附上源码:
public class TestThread {
public static void main(String[] args) {
final Object resource1 = "resource1";
final Object resource2 = "resource2";
Thread t1 = new Thread(){
public void run(){
synchronized (resource1) {
System.out.println("Thread 1:locked resource 1");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (resource2) {
System.out.println("Thread 1:locked resource 1");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
Thread t2 = new Thread(){
public void run(){
synchronized (resource1) {
System.out.println("Thread 2:locked resource 1");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (resource2) {
System.out.println("Thread 2:locked resource 1");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
t1.start();
t2.start();
}
}
------解决方案--------------------
是内部类的用法
------解决方案--------------------
那是个匿名类,继承了Thread类,一般我们定义的类都是有名字的如 public class A extends Thread{},这个类的名字是A,它继承了Thread类,在{}中可以写一些方法,包括自定义的也包括重写父类。而像LZ提的问题是 Thread t = new Thread(){};这样的写法意思是有一个类,继承了Thread,因为这个类只用一次,因此不想给它起名字,所以就用这种匿名类的写法。当此匿名类也需要定义一些新的方法,或者重写父类的方法,就要在后面跟的大括号中完成。一般继承Thread类都需要改写的是run()方法。
------解决方案--------------------
匿名类这种方法适用于抽象类或接口。
他可以声明在方法或作用域内部,通常这样做可以省去部分定义class的代码,代码看起来更加简洁。
而且像 return new Thread() {
public void run() {
....
}
}
是class无法比拟的美妙
------解决方案--------------------
内部类能够实现多继承(相当于)~~~~~~~~~~~~~~~
内部类的内部类的内部类的内部类的.............
就能实现多继承啦~!!!
------解决方案--------------------
正确的叫法是:匿名类之类。解释和2楼的一样