【发布时间】:2021-06-21 02:44:44
【问题描述】:
我正在使用多线程,这是我的场景。
- 多个线程正在运行
- 线程必须访问监视器中的不同方法
- 这些方法不会相互冲突,也不会触及相同的资源
- 我可以锁定监视器中的不同方法/区域吗?
下面的代码只是我正在尝试做的一个示例,但我希望它能够传达我的主要问题。 我有多个线程在运行,并且在监视器中有两个 ArrayList(虽然不在下面的示例代码中)。这两种方法适用于两种不同的 ArrayList,但一种方法不会触及另一种,反之亦然。如果我这样做,我会失去并行性吗?
这是监控代码:
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Monitor{
Lock lock1 = new ReentrantLock();
Lock lock2 = new ReentrantLock();
public void loopLiten(Integer ID, String type){
try{
lock1.lock();
System.out.println(Thread.currentThread().getName() + " does a small loop.");
for(Integer i = 0; i < 1000000000; i++){
}
}
catch(Exception e){
System.out.println("Error.");
}
finally{
System.out.println(Thread.currentThread().getName() + " is done making a " + type + " loop.");
lock1.unlock();
}
}
public void loopStor(Integer ID, String type){
try{
lock2.lock();
System.out.println(Thread.currentThread().getName() + " does a bigger loop.");
for(Integer i = 0; i < 1000000000; i++){
}
}
catch(Exception e){
System.out.println("Error.");
}
finally{
System.out.println(Thread.currentThread().getName() + " is done making a " + type + " loop.");
lock2.unlock();
}
}
}
【问题讨论】:
标签: java multithreading parallel-processing thread-safety locking