为什么要为 Threads 创建一个匿名的 Runnable 子类?
Why creating an anonymous Runnable subclass for Threads?
在使用线程时,写这样的东西是很常见的:
Runnable r = new Runnable()
{
public void run() { /* ... */ }
};
new Thread(r).start();
这一切都很好而且正确,但我相信可以通过更高效、更简单的方式实现同样的目标:
new Thread()
{
public void run() { /* ... */ }
}.start();
但是,在使用 Threads
和 Runnable
的代码示例中,我几乎从未见过这样的事情。使用第一个示例而不是第二个示例是否有任何技术或样式相关的原因?
贝科兹 :)
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();
They are not exactly equal .In the first case all threads share the same runnable in the second, they don't. In the first case, write to a volatile field (or if a happens-before exists), will be visible to other threads.
基本上 Thread
class 也 extends
相同的 Runnable
接口所以与 Thread
class 相同的行为你也可以通过实现 Runnable
接口直接扩展 Thread
class 并实现 run
方法。
此外,您还可以扩展其他一些 class 并实现更多 interface
。
在使用线程时,写这样的东西是很常见的:
Runnable r = new Runnable()
{
public void run() { /* ... */ }
};
new Thread(r).start();
这一切都很好而且正确,但我相信可以通过更高效、更简单的方式实现同样的目标:
new Thread()
{
public void run() { /* ... */ }
}.start();
但是,在使用 Threads
和 Runnable
的代码示例中,我几乎从未见过这样的事情。使用第一个示例而不是第二个示例是否有任何技术或样式相关的原因?
贝科兹 :)
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();
They are not exactly equal .In the first case all threads share the same runnable in the second, they don't. In the first case, write to a volatile field (or if a happens-before exists), will be visible to other threads.
基本上 Thread
class 也 extends
相同的 Runnable
接口所以与 Thread
class 相同的行为你也可以通过实现 Runnable
接口直接扩展 Thread
class 并实现 run
方法。
此外,您还可以扩展其他一些 class 并实现更多 interface
。