为线程执行公平

时间:2015-08-25 05:17:07

标签: java multithreading locking

考虑一种情况,其中线程A具有字符串列表{string1,string2},而线程B具有{string3,string4}。两个线程都试图执行一段代码,比如说

  public void critcalCodeMethod(){
    ....
    ....
    }

当线程A和B处于运行状态时,假设具有{string1,string5}的线程C和具有{string3,string 6}的线程D正在尝试访问相同的critcalCodeMethod()代码,则应将它们放入在公平队列中,应该允许它们按照它们到达的顺序执行。换句话说,线程A和B可以并行执行,因为它们没有共同的字符串。线程C应该在线程A完成后立即执行。类似地,线程D应该在线程B之后首先执行。如果任何其他线程在线程C之后应该允许带有值{string1,string7}的线程E。请在java中建议一个锁定机制来实现这一点

1 个答案:

答案 0 :(得分:0)

ReentrantLock有一个可选的公平参数,可以用来实现你的逻辑。

但是,根据这些字符串是什么,它们来自何处以及如何使用它们,可能有更合适的方法来处理并发(Guava的{​​{3}}会浮现在脑海中。