Thread里面用内部类的写法 里面已经重写了run方法 外部类还需要继承Thread或实现runnable了吗?是不是不用继承接口或实现类了?直接可以实现线程了吧?
main 方法就是主线程,在主线程里可以通过new Thread(Runnable r).start()直接启动线程运行
如果你的内部类直接作为参数传给线程的话,外部类不需要再实现接口了。
不管怎样,你用Thread或者Runnable都必须实现run方法,用类继承Thread或者实现Runnable可以,你的这种写法当然也可以,匿名内部类继承了Thread,实现了Runnable
道理一样啊
继承thread或者实现runnable只是为了方便直接传入this,this就是代表实现的那个runnable,比如多个runnable都是类似的,那么直接实现runnable,然后传入this就可以了,不需要每个都new runnable
跟你外面的类没什么关系,不管是你在Thread中内部实现run还是用Runnable实现run,他们就是两种定制化线程的方式,你把这部分放到另一个类,也能启动线程,你外部类不需要有什么处理
主要是看你new Thread的时候,有没有对应的实现
再说线程之前必须指出,你图片里面说这个类没有任何和继承是错误的,它隐性继承了Object这个类!
而线程来说,不需要你去考虑具体实现什么的,你所做的只是让它独立于主线程同时运行。那么只需要知道怎么实现线程的效果,仅仅两点,实现接口,继承。甚至这两点在本质上其实差别也不大,都是调用Thread类来做,区别只在于,一个有前戏一个没前戏
楼主看代码。。。。
package daemon;
public class ThreadDe {
public static void main(String[] args) {
// test();
(new ThreadDetest()).test();
}
// private static void test(){
// new Thread(new ThreadDemoTest()).start();
// }
}
//不用继承和实现
class ThreadDetest {
public void test(){
new Thread(new ThreadDemoTest()).start();
}
}
class ThreadDemoTest implements Runnable{
@Override
public void run() {
System.out.println("aaa");
}
}
不用了。。显然java基础不太行,楼主。
如果让一个线程实现Runnable接口,那么当调用这个线程的对象开辟多个线程时,可以让这些线程调用同一个变量;若这个线程是由继承Thread类而来,则要通过内部类来实现上述功能,利用的就是内部类可任意访问外部变量这一特性。
匿名内部类,底层其实是相当于继承或者实现类和接口
匿名内部类必须是继承一个抽象类或者实现接口
你用匿名内部类的方式,其实和继承Thread抽象类是一个样的。
这种匿名内部类的方式相当于做了一下两步:
1. 定义Thread的子类:
public static AnonymousSubThread{
public void run(){
....
}
}
2.创建该子类,并start
new AnonymousSubThread().start();