返回信息流背景:两个hashtable变量a和b,有一个initialize方法对这两个变量赋值,这两个变量各自又有对应的get方法
需求:initialize方法是同步的,同一时间只能有一个线程在调用,因此加了synchronized。现在需要当有线程在运行initialize方法时,其他调用get方法的线程都会被阻塞
问题:
1、有什么方法可以判断一个对象锁是否被占用?
2、怎么使用synchroniaze同时同步多个对象?
这是一条镜像帖。来源:北邮人论坛 / java / #19750同步于 2011/8/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
关于线程同步问题请教
uriel
2011/8/20镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
这是隐式的判断,但是不能在get方法上加synchronized,因为get方法可以同时由多个线程调用,所以我希望是显式的判断是否被锁但并不获取对象的锁
synchronized(obj)只能获取一个对象的锁,不支持送多个对象啊。。。
【 在 adobe 的大作中提到: 】
: 1 能进入 synchronized代码段就是没被锁
: 2 synchronized(obj),大家共用同一个obj
: --
: ...................
你想实现这种更精细的同步互斥操作,需要使用信号量Semaphore。
final Semaphore semp = new Semaphore(1);//生成一个数量为1的互斥锁
semp.acquire();//给资源加锁
semp.release();//释放锁
使用信号量机制可以实现写线程独占资源而读线程可以同时使用资源。
具体的使用方法可以参考操作系统的各个PV算法,尤其是读者写者问题。
如果你对线程的同步和互斥已经有较深入的了解,那可以使用高级一点的ReentrantReadWriteLock来实现读者并发和读写互斥。