繁体   English   中英

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

[英]How can a Thread constructor can accept a run method directly?

我正在参考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方法?

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


只是为了完整性,但:从Java 8中, 可以Thread构造函数(实际上)接受run函数作为参数,因为Java的8位的lambda函数。 看起来像这样:

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

这是可能的,因为Thread有一个接受Runnable实例的构造函数,而Runnable是一个功能接口 (只定义一个函数的接口),所以你可以简单地使用lambda创建一个实现该接口的实例,然后将其传递给Thread构造函数。 有一个关于lambda表达式的教程在这里 但这并不是引用代码所做的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM