处理线程是否无法进入synchronized(this)块

时间:2014-11-13 02:34:39

标签: java multithreading thread-safety synchronized

我正在研究机器人模拟到数字按钮监听器。

执行操作时存在同步(此)块。

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类似,我可以处理那些无法进入的线程。

编辑:只想打印("无法输入块");我怎样才能做到这一点。?

感谢。

1 个答案:

答案 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());

      }
    }