用Java代替"synchronized"关键字进行多线程处理

ran*_*don -1 java multithreading

你能检查一下这段代码是否是线程安全/替换同步的功能?喜欢限制访问多个线程?

class CheckSynch{

  public static booloean check=true;

  public static void func() // I am trying to write alternative code for synchronized function
  {
     if(check) {
       check=false;
       //body of function
       check=true;
       notifyAll();
     } else {
       wait();
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

Ebo*_*ike 7

任何不使用正确同步的东西都必然会破坏.如果你有两个硬件线程,它们将同时运行,因此在check检查和修改之间的时间内,可能会出现另一个线程并对其进行更改.

我不知道你为什么要避免synchronized,但无论你试图用非同步函数做什么,它都行不通,最终会破坏非常难以重现的错误.


Pet*_*rey 5

编写自己的Locking/sychronizaton是一个非常高级的主题,编写编译的代码不是一个高级主题.你必须问自己这是不是一个好主意.

你可以写类似的东西

final Lock lock = new ReentrantLock();

public static void func() {
    lock.lock();
    try {
       //body of function
    } finally {
       lock.unlock();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,您还没有说为什么要编写自己的同步.我认为这是因为你不想等待1-2微秒才能获得一把锁.

您可以使用繁忙的循环.

final AtomicBoolean lock = new AtomicBoolean();

public static void func() {
    // wait for the lock to be false and set it to true.
    while(lock.getAndSet(true)); 
    try {
        // body of function
    } finally {
        lock.set(false);
    }
}
Run Code Online (Sandbox Code Playgroud)