Java 线程问题,这种线程创建的方法,算什么意思?

hqsh9 2009-09-18 08:12:02
public class ThreadTest implements Runnable { ... }

Runnable r = new ThreadTest();
Thread t = new Thread(r);

这种线程创建的方法,算什么意思?

跟 ThreadTest t = new ThreadTest(r); 有啥区别呢?
...全文
160 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
heixia2025 2009-09-18
  • 打赏
  • 举报
回复
根据暴露最少原则,Runnable r = new ThreadTest()这里r是Runnable 类型,r引用不会暴露ThreadTest类型中的除实现Runnable意外的信息,如果你 ThreadTest r = new ThreadTest()就会把ThreadTest中的所有信息暴漏,若果你在这里仅仅使用r作为一个Runnable的话,建议使用第一种
wangmingxiavv 2009-09-18
  • 打赏
  • 举报
回复
创建线程只有两种方法:
继承java.lang.Thread类并重写run()方法;
通过实现Runnable接口创建线程,当实现Runnable接口的类的对象来创建线程以后,该线程的启动将使得对象的run()方法被调用。
sjkof 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 diggywang 的回复:]
ThreadTest 本身只是实现了Runnable接口而已,你再怎么new,也不会是一个Thread对象!
[/Quote]

没错,只是实现了接口,ThreadTest实例调用不了start()方法

说到底线程实现还是要靠Thread类,
不管你是用包装(implements Runnable)还是继承(extends Thread)。

用包装的主要原因是java不能多重继承,这样ThreadTest可以有自己的继承关系,不必受制于Thread
diggywang 2009-09-18
  • 打赏
  • 举报
回复
ThreadTest 本身只是实现了Runnable接口而已,你再怎么new,也不会是一个Thread对象!
portnet 2009-09-18
  • 打赏
  • 举报
回复
Runnable实际只是一个执行器,Thread才是真正的线程。你创建的runnable对象自己是不能够线程执行的。
hqsh9 2009-09-18
  • 打赏
  • 举报
回复
不好意思,是
ThreadTest t = new ThreadTest();
不是
ThreadTest t = new ThreadTest(r);

这两种用法上应该没啥大区别,但既然表面不同,就一定有内在的不同,所以有哪些地方只能用其一,而不能用另一个吧?
luocheng0123 2009-09-18
  • 打赏
  • 举报
回复
只是两种方法而已
daisycool 2009-09-18
  • 打赏
  • 举报
回复
没有区别。Runnable是接口,ThreadTest执行这个接口使它实例化而已,在概念上这两种方法没有任何区别,在使用中需要ThreadTest你不能用Runnable,但需要Runnable的地方可以使用ThreadTest。想想List和ArrayList,一样的道理。
luxiaoshuai 2009-09-18
  • 打赏
  • 举报
回复
Runnable r = new ThreadTest();
Thread t = new Thread(r);
这个应该是对的吧..
ThreadTest t = new ThreadTest(r); 这个....你有这样的构造的话..只能说new 了一个ThreadTest对象
longq121 2009-09-18
  • 打赏
  • 举报
回复
路过,学习...
豆虫 2009-09-18
  • 打赏
  • 举报
回复
充电..

62,621

社区成员

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

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