当前位置: 首页 > 知识库问答 >
问题:

如何检测Java中的关键区域?

皮自明
2023-03-14

我想问,如何在Java中检测关键区域?我知道这是用两个原子过程实现互斥,但我只是想知道什么是确定这是一个关键区域的一般情况。

我很想知道:

>

在Java中,关键区域是否只存在于并发系统中?

共有3个答案

李凯定
2023-03-14

您需要检查某个值是否在多个线程之间共享,如果是,则可以在设置或获取值但这些线程时将其视为“损坏”,如果用例由于此损坏值而中断,则将其锁定为关键区域。

江迪
2023-03-14

Java关键区域中的所有同步方法?

不仅synchronized方法/块,使用LockAPI的代码也保护了关键区域(第节)

保护关键区域的多种方法。

1.同步方法:

public synchronized void incrementCounter(){
    ++counter;
}

2.同步语句

public int getCounter(){
    synchronized(this){
        return counter;
    }
}

3.锁API

class X {
   private final ReentrantLock lock = new ReentrantLock();
   // ...

   public void m() {
     lock.lock();  // block until condition holds
     try {
       // ... method body, which is critical section
     } finally {
       lock.unlock()
     }
   }
 }

有用的SE问题:

如果可以使用synchronized(这个),为什么要使用ReentrantLock?

在Java中避免同步?

在Java中,关键区域是否只存在于并发系统中?

不,它们也可以在其他语言中找到。

相关问题:

java的synchronized关键字的C#版本?

PHP是否具有与Java“synchronized”相同的功能,或者这不是必需的?

令狐宏浚
2023-03-14

在并发性中,关键部分只是一个代码片段,其中一个线程可以在另一个线程正在向同一个内存中写入时向内存中写入/读取,或者当另一个线程正在从同一个内存中读取时,一个线程将要向内存中写入。

总结

>

  • 线程1-写入|线程2-写入|安全性-否

    线程1-写入|线程2-读取|安全性-否

    线程1-读取|线程2-写入|安全性-否

    线程1-读取|线程2-读取|安全性-是

    i、 e.在我们的程序中,如果我们没有对其进行适当的控制,它们可能会导致可能的错误/故障。(例如:锁、信号灯、障碍物等)

    它不仅适用于Java。它适用于任何支持线程的编程语言

  •  类似资料:
    • 我对Java还很陌生,我试着查了一下,但没有找到任何有用的东西。我想知道我怎么能检测到一个特定的窗口关闭了?我一直在使用windowClosing(),但这适用于关闭的任何窗口,因此如果窗口B关闭,我希望由于窗口a关闭而发生的事件也会发生。我如何只在窗口A关闭的情况下进行检测?抱歉,如果这是一个糟糕的措辞,我不知道那么多Java术语。提前致谢:)

    • 问题内容: 我正在命令窗口(Windows 7,Python 3.1)中运行进程,我希望用户通过按ESCape键来中止该进程。但是,按ESCape键似乎没有执行任何操作:-(,循环永不中断。我也尝试从IDE(机翼)内部运行脚本,但同样,循环也不能中断。 以下是我的概念验证测试的简化版本… 如果有人能告诉我我可能会出问题的地方,我将不胜感激。 问题答案: Python 3字符串是unicode,因此

    • 问题内容: 我需要根据他们的IP或http标头了解用户当前所在的时区。 关于这个问题,我有很多答案,但是我听不懂那些答案。有人说使用。但是这是什么意思? 我的(index.php)页面的根目录中有一个。因此,为此,我必须动态获取时区并将其设置为。 问题答案: 总结一下Matt Johnson在代码方面的答案:

    • 问题内容: 我是Java的初学者,一直在研究如何检测用户是否按下了某个键(例如箭头键)。显然,有很多方法可以做到这一点,我发现此方法应该对我有用: 问题是我不知道什么是KeyEvent。 当我调用该方法并给我举个例子时,谁能告诉我在括号中加什么? PS:不要把我发送到其他站点,我可能已经看过了,他们只是让我更加困惑… 问题答案: public class KeyEvent extends Inpu

    • 问题内容: 我尝试了一些方法来检测代码中的EOF,但仍然无法正常工作。我尝试使用BufferedReader,Scanner和char u001a标记EOF,但对我的代码仍然没有任何意义。这是我的最后一个代码: 该程序应该在到达EOF时停止运行,但是我不知道为什么,由于某些原因,它会继续运行并导致运行时错误。请帮忙。顺便说一句,我是新来的,如果对我的问题还不清楚,很抱歉,谢谢您:) 问题答案: 由

    • 我尝试了一些方法来检测我的代码中的EOF,但它仍然不起作用。我试过使用BufferedReader、Scanner和使用charu001a来标记EOF,但仍然对我的代码没有任何意义。这里是我的最后一段代码: 程序应该在已经到达EOF时停止,但我不知道为什么,由于某些原因,它继续运行并导致运行时错误。请帮帮忙。顺便说一下,我是新来的,如果我的问题不是很清楚,很抱歉不能理解,谢谢你之前:)