请教JAVA 中 Thread的问题?

shadow0577 2007-10-12 11:50:06
class A extends Thread
{
public void run()
{
System.out.println("hello");
}
}
public class BaseTest
{
public static void main(String[] args)
{
A a = new A();
a.start(); // 也可以改成这样new Thread(a).start(); 请教大家这两句有什么区别吗?

}
}
...全文
203 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shadow0577 2007-10-12
  • 打赏
  • 举报
回复
再请教下楼上的朋友
下面的两段的代码都是创建了三个对象再start(),那它们有区别吗?或者说把a作数参数传给Thread()建个Thread对象,这种方法有什么好处吗?
A a = new A();
A b= new A();
A c = new A();
a.start();
b.start();
c.start();


A a=new A();
new Thread(a).start();
new Thread(a).start();
new Thread(a).start();

qybao 2007-10-12
  • 打赏
  • 举报
回复
简单的说
a.start();是线程a本身执行
new Thread(a).start(); 这个另起一个线程来执行a
执行的线程对象不一样,但都会执行a的run方法
汪老实 2007-10-12
  • 打赏
  • 举报
回复
new Thread(a).start(); 是因为Thread实现了Runnable接口而从新创建了线程。
也就是说上面的代码中有三个线程,而下面却是一个线程启动三次。肯定会有错阿!
micro_e 2007-10-12
  • 打赏
  • 举报
回复
A a=new A();
new Thread(a).start();
new Thread(a).start();
new Thread(a).start();
//这样是可以运行的,并输出
hello
hello
hello
----------------------3个对象,每个执行一次
而改成
A a = new A();
a.start();
a.start();
a.start();
----------------------1个对象,执行3次
//在输出一个hello后就出现异常了.

为什么呢?
shadow0577 2007-10-12
  • 打赏
  • 举报
回复
A a=new A();
new Thread(a).start();
new Thread(a).start();
new Thread(a).start();
//这样是可以运行的,并输出
hello
hello
hello

而改成
A a = new A();
a.start();
a.start();
a.start();
//在输出一个hello后就出现异常了.

为什么呢?
karlpan01 2007-10-12
  • 打赏
  • 举报
回复
Thread已经实现了Runnable接口
Thread存在Thread(Runnable target) 这样的构造方法来 分配新的 Thread 对象
然后a被看作是Runnable对象,多态
结果一样,实现结果的对象不同!
汪老实 2007-10-12
  • 打赏
  • 举报
回复
new Thread(a).start();这句编译起认为a只是实现了Runnable接口,
先把a转成了Runnable,这两句的实现肯定是不一样的!
lihaifeng0412 2007-10-12
  • 打赏
  • 举报
回复
new Thread(a).start() new创建一个新的无名线程然后将a赋值给新创建的,在调用.start(),他调用的是Thread线程中的方法。

a.start(); 是因为类A继承了Thread类,他包含了.start( )方法,用A创建了对象a,然后用a调用从Thread继承下来的.start( );

shadow0577 2007-10-12
  • 打赏
  • 举报
回复
qybao 的解答非常满意
shadow0577 2007-10-12
  • 打赏
  • 举报
回复
非常感谢 各位朋友热心解答 明白了! 谢谢!
qybao 2007-10-12
  • 打赏
  • 举报
回复
用第一种方法比较好,一个原因是创建的对象少,只有3个(第二种有4个),另一个原因是,第一种方法是三个独立的对象,互不干扰,第二种是3个线程共享a对象,互相有影响。

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧