JavaSE:调用方法的第一个线程会中断所有其他线程

时间:2015-08-29 02:05:21

标签: java multithreading

我有2个线程同时运行..如果您将通过一系列循环等赛车。第一个到达计算结束的线程我调用了一个方法。我想知道该方法是否可以中断所有其他线程..或锁定它们,所以只有第一个调用该方法的线程才会运行该方法。

修改的 我想举一个例子:

创建线程的类:

class Runner extends Thread{

    public void run(){
        //for loops
            //math, math, math
        // while
            // random numbers, math
        // yada yada

        methodCall();
    }
}

主方法中的methodCall()

public static *synchronized perhaps* void methodCall(){
    //first call wins
    //interrupt all other threads created
}

2 个答案:

答案 0 :(得分:2)

是的,你可以这样做。创建方法synchronized,使其一次只能由一个线程运行,并在方法内设置一个标志,该标志将导致该方法的未来运行中止。

注意:如果方法是实例方法而不是静态方法,并且不同的线程使用方法所在的类的不同实例,则需要在全局锁上进行同步,例如静态{{1在课堂上。

答案 1 :(得分:0)

尝试通过调用synchronized方法来结束竞争对手的线程,该方法设置一些空初始化变量的值。获胜者将调用该方法并获取锁定,找到值null,并在其中设置其名称。失败者将获得下一个锁定位,找到已设置的获胜者名称。

public class RaceJudge
{
    private static Runner m_tskWinner = null ;

    /**
     * The "methodCall()" from the question.
     * @param tskCompetitor the Runner that is trying to cross the
     *   line.
     * @return true if that task won the race.
     */
    public static synchronized boolean crossFinishLine( Runner tskCompetitor )
    {
        if( m_tskWinner == null )
        {
            m_tskWinner = tskCompetitor ;
            return true ;
        }
        else
            return false ;
    }
}

...因此

public class Runner extends Thread
{
    @Override
    public void run()
    {
        // the aforementioned yadda yadda
        RaceJudge.crossFinishLine(this) ;
    }
}