1。我看有的线程是实现了 Runable 接口,然后在新的类里重写 run方法
2。而有的线程是直接继承Thread类,如
Thread newThread = new Thread()
{
public void run()
{
//
}
}第一种显得不如第二种方法灵活
他们到底有什么区别阿
还有,我想问一下阿,实现了Runable接口的类,一般都还继承了其他的许多类,比如public class MyCanvas extends Canvas implements Runnable。我问一下阿,是不是这些类一 new,run 方法就要运行呢?
2。而有的线程是直接继承Thread类,如
Thread newThread = new Thread()
{
public void run()
{
//
}
}第一种显得不如第二种方法灵活
他们到底有什么区别阿
还有,我想问一下阿,实现了Runable接口的类,一般都还继承了其他的许多类,比如public class MyCanvas extends Canvas implements Runnable。我问一下阿,是不是这些类一 new,run 方法就要运行呢?
Runnable是Thread的接口,在大多数情况下都喜欢用接口去生成线程,接口可以多继承么。
----》》》我问一下阿,是不是这些类一 new,run 方法就要运行呢?
Thread Test = new Thread();
Test.start();
在使用Runnable的时候需要先new一个实现Runnable的实例,然后调用Thread构造函数。
A impelements Runnable
A a= new A();
Thread xx= new Thread(a);
只有在调用了start方法后,线程才进入可运行状态(此时不一定会运行),当cpu时间片到的时候才会自动调用run方法,代码中无需调用run方法
如果你用继承Thread的方式,那你就不能继承其他的类了。
我比较喜欢用实现接口的方式。
当你只有一个线程的时候就集成thread即可,因为他没有交替的资源访问
我想知道:
继承Thread方法的线程t,需要手工t.start来启动该线程
实现了Runnable方法的线程tt,也需要手工tt.start来启动吗?
Thread.start(你自己写的线程类的实例)
这样启动。注意,start是静态方法。
1.直接继承时:
Thread t = new Thread();
t.start(); //使线程进入就绪状态,等待CPU时间片
2.在使用Runnable的时候需要先new一个实现Runnable的实例,然后调用Thread构造函数。
A impelements Runnable
A a= new A();
Thread tt= new Thread(a);
tt.start(); //使线程进入就绪状态,等待CPU时间片
A a= new A();
Thread xx= new Thread(a);
Thread yy= new Thread(a);
xx.start();
yy.start(); 2. A impelements Runnable
A a= new A();
A a1= new A();
Thread xx= new Thread(a);
Thread yy= new Thread(a1);
xx.start();
yy.start();
请问什么时候适用第一种情况,什么时候适用第2种情况?