首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java语法:"synchronized (this)“

java语法:"synchronized (this)“
EN

Stack Overflow用户
提问于 2012-11-07 15:03:52
回答 6查看 38.7K关注 0票数 32

你能给我解释一下这段java代码吗?我不能理解这个语法。

代码语言:javascript
复制
synchronized (this) {
              try {
                  wait(endTime - System.currentTimeMillis());
              } catch (Exception e) {
              }
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-11-07 15:05:56

这意味着这段代码是synchronized的,这意味着最多只有一个线程能够访问该块中的代码。

另外,this意味着您可以在当前实例上进行同步(获取当前实例上的锁)。

这就是我在凯西·塞拉的java认证书中找到的。

因为同步确实会损害并发性,所以您不希望同步超过保护数据所需的任何代码。因此,如果一个方法的作用域超过了所需的范围,您可以将同步部分的作用域缩小到比完整方法更小的范围--仅仅是一个块。

请看下面的代码片段:

代码语言:javascript
复制
public synchronized void doStuff() {
    System.out.println("synchronized");
}

可以将其更改为:

代码语言:javascript
复制
public void doStuff() {
   //do some stuff for which you do not require synchronization
   synchronized(this) {
     System.out.println("synchronized");
     // perform stuff for which you require synchronization
   }
}

在第二个代码片段中,同步锁仅应用于该代码块,而不是整个方法。

票数 48
EN

Stack Overflow用户

发布于 2012-11-07 15:10:01

代码语言:javascript
复制
synchronized (this)

是实现块级同步的语法。

这意味着在this对象上,一次只有一个线程可以执行封闭的块。

在这里可以找到更详细的答案:Block level synchronization

票数 6
EN

Stack Overflow用户

发布于 2012-11-07 15:16:34

第一行控制对封闭代码块的并发访问。一次只能有一个线程执行代码块。有关更多信息,请阅读this tutorial的第2.2节

代码语言:javascript
复制
synchronized (this) {

下面包含的代码块似乎使用了一种(非常差的)方法,将执行线程暂停给定的时间量。

代码语言:javascript
复制
    try {
        wait(endTime - System.currentTimeMillis());
    } catch (Exception e) {
    }

此外,它还“吞噬”了等待过程中可能抛出的任何异常,这确实非常淘气。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13264726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档