我正在研究机器人模拟到数字按钮监听器。
执行操作时存在同步(此)块。
public void Init() {
new Timer(200, taskPerformer).start();
)
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent e) {
//not synchronized code
synchronized (this) {
//synchronized code
}
}
}
现在我的问题是如何理解哪个线程无法进入该块? 有没有办法让我能处理这些线程。与if-else类似,我可以处理那些无法进入的线程。
编辑:只想打印("无法输入块");我怎样才能做到这一点。?
感谢。
答案 0 :(得分:0)
你可以锁定Object
(而不是this
),它在你需要真正同步的一组线程中共享
锁定对象
Object lockGroup1 = new Object();
持有它的线程
class MyThread implements Runnable {
Object lock;
public MyThread(Object lock){
this.lock = lock;
}
// other stuff ofcourse
}
和
MyThread thread1 = new MyThread(lock1);
基于评论的更新
Set<Long> waitingThreads = Collections.synchronizedSet(new HashSet<Long>());
public void myMethod() {
waitingThreads.add(Thread.currentThread().getId());
synchronized (this){
waitingThreads.remove(Thread.currentThread().getId());
}
}