gpt4 book ai didi

java - Thread 构造函数如何直接接受 run 方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:12 25 4
gpt4 key购买 nike

我是指DeadLock代码,看到了这个网站

http://www.javatpoint.com/deadlock-in-java

我看到了 java API,但找不到任何这样的线程构造函数并且仍然想知道它是如何在 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 方法?

最佳答案

构造函数未接受 run 方法(例如,作为参数),该代码正在创建一个匿名类,请参阅this tutorial .在幕后,创建了一个没有名称的类(匿名类),它派生自 Thread 并覆盖 run 方法;然后创建该类的实例并将其分配给 t1 变量。


只是为了完整起见:从 Java 8 开始,Thread 构造函数可能(实际上)接受一个run函数作为参数,因为 Java 8 的 lambda 函数。看起来像这样:

    Thread t = new Thread(() -> {
System.out.println("Running");
});

这是可能的,因为 Thread 有一个接受 Runnable 的构造函数实例,而 Runnable 是一个函数式接口(interface)(一个只定义一个函数的接口(interface)),因此您可以简单地使用 lambda 创建一个实现该接口(interface)的实例,然后将其传递给 Thread 构造函数。有一个关于 lambda 的教程 here .但这不是引用代码的作用。

这是您问题中使用 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");
}
}
});

关于java - Thread 构造函数如何直接接受 run 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26175181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com