我有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
}
答案 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) ;
}
}