如何在Java中中断同步语句?

Eri*_*ric 7 java multithreading interrupt synchronized

我有两个线程想要在同一个对象上进行同步.如果某个条件已满,则A需要能够中断线程B.这是两个线程做/应该做的一些伪代码.

A:

public void run()
{
    while(true)
    {
        //Do stuff
        synchronized(shared)
        {
            //Do more stuff
            if(condition)
            {
                B.interrupt();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

B:

public void run()
{
    while(true)
    {
        try
        {
            //Do stuff
            synchronized(shared)
            {
            //Do more stuff
            }
        }
        catch(InterruptedException e)
        {
            continue;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我无法解决的情况:

  • 线程A抓取共享资源并执行一些操作.
  • 同时,Thread B到达synchronized块,等待A释放其共享资源.
  • 线程A,在做东西时,意识到线程B不应该有共享资源,并尝试中断线程B.但是线程B已经超过了InterruptedException可以抛出的点数.

我的问题是,有什么方法可以在线程等待synchronized某事时中断线程吗?

Mic*_*rdt 5

对于这种事情,您应该使用类java.util.concurrent.locks- 它们具有更多功能,包括可中断锁.

编辑:如果你不能使用这些类,那么看看jkff的答案 - 你的要求可以通过wait()/ mechnism来满足notify(),但很容易引入微妙的错误.

  • @finnw:不,我正在使用LeJOS NXJ,一种用于Lego Mindstorms NXT微控制器的Java语言. (3认同)