不使用extends和implements创建线程

3

我正在查看公司中一个旧的Java项目,发现作者(已经离开了公司)创建和运行线程时没有继承Thread类或实现Runnable接口。值得注意的是,该类是单例模式。代码片段如下:

import java.sql.*;
import org.apache.log4j.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DataLookup 
{

  private static DataLookup _ref;

  private DataLookup() 
  {
  }

  public static DataLookup getInstance() 
  {
    if (_ref == null) 
    {
      synchronized (DataLookup.class) 
      {
        if (_ref == null) 
        {
          _ref = new DataLookup();
        }
      }
      return _ref;
    }
  }
  /*
  * Implementation Logic
  */

  public void writeRecord(String a, String b, String c)
  {
    /*
    * Implementation Logic
    */
    Thread writerThread = new Thread()
    {
      public void run() 
      {
        /*
         * Implementation Logic
        */
      }
    }
    writerThread.start();
  }
}

这种方法如何运作——使用线程而不需要扩展Thread类或实现Runnable接口? 使用这种方法的优缺点是什么(不扩展和实现有哪些优缺点)?

1
一个匿名类是继承另一个类的类。这就是你在这里看到的,一个Thread的匿名子类。 - Sotirios Delimanolis
http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html - JB Nizet
2个回答

8
Thread writerThread = new Thread()
{
  public void run() 
  {
    /*
     * Implementation Logic
    */
  }
}

这段代码创建了一个扩展Thread匿名类

匿名类使您的代码更加简洁。它们允许您同时声明和实例化一个类。它们类似于本地类,但没有名称。如果您只需要使用本地类一次,请使用它们。

以上引用摘自Java教程,您可以在其中阅读更多相关内容。

1

可以在不实现或扩展Runnable接口和Thread类的情况下完成。

Java 8之前:

Runnable r = new Runnable() {
         @Override
         public void run() { 
          //Your logic
         }
      };
Thread t = new Thread(r);
t.start();

Java 8:

Runnable r2 = () -> {  //Your logic };
Thread t = new Thread(r2 );
t.start();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接