为什么java中Thread不直接定义为抽象类?

dream56 2015-08-15 05:59:22
反正不管怎么样我们用Thread这个类都是要重写run()方法来实现多线程的,而如果要使用Thread类的 其他方法,我们完全可以设置其为static的。那么Thread这个类如果 定义为抽象了岂不是完全可以实现现在的功能而且还可以提醒程序员必须要复写run()方法以减少出错,这样岂不是更好?
...全文
878 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
NewMoons 2016-08-03
  • 打赏
  • 举报
回复
上面有个地方写错了,【如果Thread1是抽象的,不能直接实例化】的Thread1改成Thread。
NewMoons 2016-08-03
  • 打赏
  • 举报
回复 1
实现线程不是非要重写Thread的run方法,也可以用一个实现类去实现Runnable接口。 比如
public class Thread1 implements Runnable {

	public Thread1() {
		// todo
	}

	@Override
	public void run() {
		// Todo some thing...
	}

	public void fun1(){
		// Todo some thing...
	}
	
	public void fun2(){
		// Todo some thing...
	}
}
当需要执行线程时可以直接 new Thread(new Thread1()); 如果Thread1是抽象的,不能直接实例化(别说用静态方法实现啊,那我只能呵呵了),则还必须画蛇添足的去继承并实现Thread,那要Runnable 还有什么用呢,直接在继承Thread的时候覆盖run不就可以了。 当然,你可以说不需要Runnable ,但提供Runnable 的目的就是最大程度的解耦,提供更多更灵活的设计思路。 不是么?
soton_dolphin 2016-08-02
  • 打赏
  • 举报
回复
引用 6 楼 dream56 的回复:
[quote=引用 3 楼 scmod 的回复:] 有Runnable接口... 一般不会直接改Thread的run()的
你创建这样不就可以实例化了麻 new Thread(){这里实现run方法}[/quote] 可以这么做但是并不推荐这么做
soton_dolphin 2016-08-02
  • 打赏
  • 举报
回复 1
用extends Thread 类并且重写run()方法实现多线程并不是实现多线程的方式和原本的意图。实际上Java已经提供了Runnable接口,程序可以实现Runnable接口里面的run()方法来完成多线程。
dream56 2016-08-02
  • 打赏
  • 举报
回复
引用 3 楼 scmod 的回复:
有Runnable接口... 一般不会直接改Thread的run()的
你创建这样不就可以实例化了麻 new Thread(){这里实现run方法}
dream56 2016-08-02
  • 打赏
  • 举报
回复
引用 1 楼 kexin5a 的回复:
1:当时设计者没有考虑到:-->为什么后人会有thread类为什么不是abstract 的想法 2:蒙圈者各种百度谷歌 3:重复上一条 4:继续蒙圈中..... 按照你的想法,thread为abstract,好,用的时候extend是thread,重写run(),那么其他方法呢用thread.xxx()?你的thread是abstract的 我怎么调啊。如果要多线程建议去implement Runnable 就一个run(),不实现就给你大姨妈看。
我是说把Thread的成员都定义为static的作这样不就可以通过Thread.xxx()调用了吗.....
code小生 2015-08-16
  • 打赏
  • 举报
回复
Thread这个类本身实现了Runable接口,实现接口就要重写接口中的抽象方法。况且如果定义为抽象类,还怎么实例化,怎么创建线程呢?
scmod 2015-08-16
  • 打赏
  • 举报
回复
有Runnable接口... 一般不会直接改Thread的run()的
rumlee 2015-08-16
  • 打赏
  • 举报
回复
谁说使用Thread都需要重写run的啊,实现Runnable不就不需要重写Thread的run了吗? new Thread(runnable).start();
kexin5a 2015-08-15
  • 打赏
  • 举报
回复
1:当时设计者没有考虑到:-->为什么后人会有thread类为什么不是abstract 的想法 2:蒙圈者各种百度谷歌 3:重复上一条 4:继续蒙圈中..... 按照你的想法,thread为abstract,好,用的时候extend是thread,重写run(),那么其他方法呢用thread.xxx()?你的thread是abstract的 我怎么调啊。如果要多线程建议去implement Runnable 就一个run(),不实现就给你大姨妈看。

62,614

社区成员

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

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