GC_*_*GC_ 1 java multithreading locking thread-safety
我基本上是在使用一个框架工作,从两个不同的线程调用一堆函数.我希望在允许下一个线程继续之前完成一个完整的线程.但是,我无法更改代码.
例如,假设有两个线程,线程1和线程2.每个线程调用方法一到三.
所以你得到一个类似的电话订单:
T1-M1 T1-M2 T2-M1 T1-M3 T2-M2 T2-M3
但是,我想要发生的是T1-M1设置某种阻止T2的锁,所以顺序如下.
T1-M1 - get lock
T2-M1 - blocked
T1-M2
T1-M3 - release lock
T2-M1 - no longer blocked - gets lock
T2-M2
T2-M3
是否可以在Java中执行此操作而无需从框架中编辑调用方法?
您不能使用synchronized关键字提供的简单功能来执行此操作:必须以获取它的相同方法(甚至块)释放其锁定.
但是,您可以使用这些工具java.util.concurrent.locks.
它的ReentrantLock类几乎是机制的具体化synchronized.
但请记住,这种方法很危险.如果一个线程调用M1和M2,但从来没有要求M3?例如,在调用M2和之间的某些代码中可能会出现异常M3.
| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |