使用Threads时,写下这样的东西是很常见的:
Runnable r = new Runnable()
{
public void run() { /* ... */ }
};
new Thread(r).start();
这一切都很好而且正确,但我相信可以通过更加高效和简单的方式实现同样的目标:
new Thread()
{
public void run() { /* ... */ }
}.start();
但是,在使用Threads
和Runnable
的代码示例中,我几乎从未见过这样的内容。是否有任何技术或样式相关的原因使用第一个例子而不是第二个例子?
答案 0 :(得分:2)
Becoz:)
Runnable r = new Runnable()
{
public void run() { /*your code */ }
};
new Thread(r).start();
new Thread(r).start();
new Thread(r).start();
new Thread(r).start();
等于
new Thread()
{
public void run() { /* ... */ }
}.start()
new Thread()
{
public void run() { /* ... */ }
}.start();
new Thread()
{
public void run() { /* ... */ }
}.start();
new Thread()
{
public void run() { /* ... */ }
}.start();
它们并不完全相同。在第一种情况下,所有线程在第二种情况下共享相同的runnable,它们不会。在第一种情况下,写入易失性字段(或者如果发生之前存在),将对其他线程可见。
答案 1 :(得分:1)
基本上Thread
类extends
也是Runnable
接口,所以Thread
类的行为也可以通过实现Runnable
接口直接扩展来实现Thread
类并实施run
方法。
此外,您还可以扩展其他类,并实现更多interface
。