1)为什么Java语言同时提供Thread和Runnable? 2)线程超过runnable有什么好处(为什么Java只能提供runnable) 3)我们可以进行可运行的睡眠,给它一个id等吗?
答案 0 :(得分:8)
1。线程是一个类,当您说.start()
时,您创建一个附加到线程类实例的thread of execution
。调用Runnable的run()
方法,使其执行 thread of execution
上的任务,start()
方法快速返回。
2。 Runnable
是分配给task
的{{1}}。
3。所以没有Thread类,你就无法运行Runnable。
答案 1 :(得分:4)
1)线程是一个类并包含功能 - 而runnable是一个接口,因此只是实现类遵循的“契约”。由于Runnable只是一个接口,您需要实例化一个线程来包含它。而线程已经包含产生线程的能力。
2)实现Runnable是建议的方法,因为如果扩展Thread,则不能扩展其他任何东西(Java不支持多重继承)。您可以在一个类上有多个接口,因此您可以拥有Runnable +许多其他接口,并且还可以扩展另一个基类
3)你从Runnable的实例化中获取线程并使其休眠 - this.sleep()