类似蜂王争夺王位的多线程算法有什么好的解决方案

我们知道,蜂王要死的时候会生产很多蜂王卵.这些卵同时糊化,第一出来的会干掉其他还未出来的卵,自己成为蜂王.

有没有类似的多线程算法.
并发执行,其中一个线程有结果,就结束其他线程.
问题补充
CountDownLatch这个貌似不行

4个回答

ExecutorService接口的invokeAny方法

CountDownLatch

[code="java"]import java.util.concurrent.CountDownLatch;

public class RunTest {

static CountDownLatch doneSignal = new CountDownLatch(2);

public static void main(String[] args) {
    Runner r1 = new Runner(doneSignal,"liu",100);
    Runner r2 = new Runner(doneSignal,"jackson",50);

    new Thread(r1).start();
    new Thread(r2).start();
}

}

class Runner implements Runnable{
private CountDownLatch doneSignal;
private String name ;
private long speed ;

public Runner(CountDownLatch doneSignal,String name,long speed){
    this.doneSignal = doneSignal;
    this.name = name;
    this.speed = speed;
}

public void run(){
    int i = 0;

    for(i = 0; i < 20; i++){
        if(doneSignal.getCount() == 1){
            System.out.println(name + " lose!");
            return;
        }

        try {
            Thread.sleep(speed);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    System.out.println(name + " win!");
    doneSignal.countDown();
}

}[/code]

Semaphore也可以.
只给予一个许可.最先得到许可的线程可以运行.其他的线程阻塞并死亡

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问