【问题标题】:Thread clarification in JavaJava中的线程说明
【发布时间】:2014-01-28 20:43:44
【问题描述】:

当我们扩展Thread而不是实现Runnable时,是否可以同步方法?

我知道当我们使用Runnable 时,这是可能的。但是当我们做Thread t1 = new Thread();的时候,能做到吗?

如何同步?

【问题讨论】:

  • 能否提供您的代码示例(使用 Runnable)?
  • 你可以用Thread做所有可以由Runnable做的事情,除非你不能扩展任何其他类,如果你用Thread扩展一个类。

标签: java multithreading thread-safety synchronized


【解决方案1】:

同步与定义方法的类是正交的。您可以在 any 方法中使用synchronized。这只是意味着有一个互斥锁在保护该代码块。

public class MyTotallyUnspecialClass {
    synchronized public void someTotallyUnspecialMethod() {
        // this method is synchronized, with a mutex on "this"
    }
}

【讨论】:

    【解决方案2】:

    无论是扩展 Thread 还是实现 Runnable,都不会影响同步。当您同步一个方法时,您会锁定 OBJECT 而不是线程 - 所以这并不重要。有很多 SO 主题讨论这两种方法之间的区别(扩展线程与实现 Runnable)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2016-05-16
      相关资源
      最近更新 更多