我正在引用DeadLock代码并看到了这个网站
http://www.javatpoint.com/deadlock-in-java
我看到了java API,但找不到任何这样的Thread Constructor,仍然想知道这是如何在Eclipse IDE中编译的?
Thread t1 = new Thread() {
public void run() {
synchronized (resource1) {
System.out.println("Thread 1: locked resource 1");
try { Thread.sleep(100);} catch (Exception e) {}
synchronized (resource2) {
System.out.println("Thread 1: locked resource 2");
}
}
}
};
Thread构造函数如何直接接受run方法?
答案 0 :(得分:4)
构造函数不接受 run
方法(例如,作为参数),该代码正在创建匿名类,请参阅{ {3}}。在幕后,创建一个没有名称的类(匿名类),该类派生自Thread
并覆盖run
方法;然后创建该类的实例并将其分配给t1
变量。
仅仅为了完整性:从Java 8开始, 可能Thread
构造函数(实际上)接受run
函数作为参数,因为Java 8的lambda函数。看起来像这样:
Thread t = new Thread(() -> {
System.out.println("Running");
});
这是可能的,因为Thread
有一个构造函数接受一个this tutorial实例,而Runnable
是一个功能接口(一个只定义一个函数的接口) ),所以你可以简单地使用lambda创建一个实现该接口的实例,然后将其传递给Thread
构造函数。有关于lambdas Runnable
的教程。但这并不是引用代码所做的事情。
这里使用lambda代替匿名类的问题中的代码:
Thread t1 = new Thread(() -> {
synchronized (resource1) {
System.out.println("Thread 1: locked resource 1");
try { Thread.sleep(100);} catch (Exception e) {}
synchronized (resource2) {
System.out.println("Thread 1: locked resource 2");
}
}
});