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)
任何不使用正确同步的东西都必然会破坏.如果你有两个硬件线程,它们将同时运行,因此在check检查和修改之间的时间内,可能会出现另一个线程并对其进行更改.
我不知道你为什么要避免synchronized,但无论你试图用非同步函数做什么,它都行不通,最终会破坏非常难以重现的错误.
编写自己的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)
| 归档时间: |
|
| 查看次数: |
1368 次 |
| 最近记录: |