当我';我正在用Java创建一个线程?
Java中的线程可以通过两种方式定义:当我';我正在用Java创建一个线程?,java,multithreading,Java,Multithreading,Java中的线程可以通过两种方式定义: 您可以实现Runnable接口 您可以扩展Thread类本身 这种创建线程的方法是什么 Thread t = new Thread() { @Override public void run() { try { sleep(10000); } catch (InterruptedException e) { System.err.println
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();
然后有这样的代码
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中的线程可以通过两种方式定义:
因此,这里您的线程由第二个选项定义这里给出了一个引用:“java中的匿名类是一个没有给出名称的类,它在一个语句中都被声明和实例化。当你需要创建一个只实例化一个类时,你应该考虑使用匿名类。”但我没有在我的代码中提供任何构造函数?????我同意你的说法,但我的问题是“java线程需要通过扩展线程类来创建,但我没有扩展任何类”我只是使用匿名类。。。。换句话说,匿名类意味着扩展任何超级类?????:)现在我对匿名类有了一些了解。。。非常感谢