Java 中的线程可以通过两种方式定义:
- 您可以实现 Runnable 接口。
- 您可以扩展 Thread 类本身。
这种创建线程的方法是什么?
Thread t = new Thread() {
@Override
public void run() {
try {
sleep(10000);
}
catch (InterruptedException e) {
System.err.println(e);
}
finally {
finish();
}
}
};
t.start();
这是一个匿名类吗?这段代码工作正常,我确实测试了这段代码。但我不明白这里发生了什么。
是的,您的代码创建了一个匿名类。
这是匿名类???????????
是的,这是匿名内联类实现。当您想要使用内联类实现在本地创建类的线程对象时,将使用此方法。
这是匿名类吗? 是的,它是匿名类
阅读此内容以了解匿名类这里有很好的例子
你的代码在某种意义上等同于有一个单独的类,定义如下。
public class SleepyThread extends Thread {
@Override
public void run() {
try {
sleep(10000);
}
catch (InterruptedException e) {
System.err.println(e);
}
finally {
finish();
}
}
}
然后有这样的代码。
Thread t = new SleepyThread();
t.start();
但是,由于您只需要在一个位置使用此类,因此无需为其命名或为其指定自己的源文件。 您可以简单地以您完成的方式内联类定义。
编译器仍将为其创建一个类文件,名称类似于 MyClass$1.class
,其中 MyClass
是你在其中使用它的类。 它只是"匿名",因为你没有给它一个名字。 它在各个方面仍然是一个成熟的班级。
这就是我们所说的匿名类,你说得对:--
Java 中的线程可以通过两种方式定义:
实际上,您在内部创建了一个扩展Thread类的子类的匿名类。所以在这里你的线程由第二个选项定义..!