我的方法如下所示。
public int smallest(int num1, int num2, int num3){
if (num1 < num2){
if (num1 < num3 ){
return num1;
}
}
if (num2 < num1){
if (num2 < num3){
return num2;
}
}
if (num3 < num1){
if (num3 < num2){
return num3;
}
}
else
return num1;
}
我需要限制对这些方法的访问,以便
为了满足第一次访问条件,我提出了以下代码, 但是这不会满足其他3个条件,因此性能会受到影响。
public class CriticalSections
{
public void mainMethod(boolean b)
{
if (b) {
method1();
}
else {
criticalMethod();
method2();
}
}
private void criticalMethod()
{
System.out.println("in criticalMethod");
}
private void method1()
{
System.out.println("in method1");
}
private void method2()
{
System.out.println("in method2");
}
}
用于满足上述场景的同步机制应该是什么?
答案 0 :(得分:3)
您需要的是display: block;
上的独占锁定以及方法criticalMethod
和method1
上的可共享锁定。实现此目的的最简单方法是使用method2
,如下所示:
java.util.concurrent.locks.ReentrantReadWriteLock
如果您担心性能问题,您还可以take a look at public class CriticalSections {
private final ReadWriteLock lock = new ReentrantReadWriteLock();
public void mainMethod(boolean b) {
if (b) {
method1();
} else {
criticalMethod();
method2();
}
}
private void criticalMethod() {
Lock writeLock = lock.writeLock();
writeLock.lock();
try {
System.out.println("in criticalMethod");
} finally {
writeLock.unlock();
}
}
private void method1() {
Lock readLock = lock.readLock();
readLock.lock();
try {
System.out.println("in method1");
} finally {
readLock.unlock();
}
}
private void method2() {
Lock readLock = lock.readLock();
readLock.lock();
try {
System.out.println("in method2");
} finally {
readLock.unlock();
}
}
}
(Java 8 +)。