多线程暂停,等待条件成熟,一起运行。这个如何实现?比如,一个入口,访问dosome()方法。当访问的次数少于3次,这2个线程等待着。等待第三个访问时,一起运行。这个如何实现啊?

解决方案 »

  1.   

    //定义一个java.util.concurrent.locks.ReentrantLock类对象
    private final ReentrantLock lock = new ReentrantLock();
    //获取该lock上的一个条件Condition 
    private  final Condition visitCount= lock.newCondition(); 
    //你的方法
    public void doSomeThing() throws InterruptedException {
        //加锁    
        lock.lock();  
         try {
           //检查条件,访问的次数少于3次
           while (count<3) 
          {
             visitCount.await();//等待
          }
          //下面编写条件成立时要执行的代码
           
            //唤醒所有等待线程
             visitCount.signalAll();
             } finally {
             //解锁
           lock.unlock();
         }
       }
      

  2.   

    public class TestThread {

    private int count = 0;
    private class MyThread implements Runnable {
    private String name;
    private boolean isStart = true;
    public MyThread(String name) {
    this.name = name;
    }

    public void run() {
    while(isStart) {
    try {
    Thread.sleep(1000);
    dosome();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }

    public synchronized void dosome() {
    count ++;
    System.out.println(name + " : " + count);
    if(count < 3) {
    try {
    this.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    if(count == 3) {
    this.notifyAll();
    }
    try {
    Thread.sleep(500);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }

    public void init() {
    MyThread m1 = new MyThread("m1");
    MyThread m2 = new MyThread("m2");
    MyThread m3 = new MyThread("m3");
    new Thread(m1).start();
    new Thread(m2).start();
    new Thread(m3).start();
    }
    public static void main(String args[]) {
    new TestThread().init();
    }
    }你自己运行下,这个我已经测试好了。
      

  3.   

    思想是这样的.    用户登录页面,调用 继承Httpservlet的post方法,然后看一下是否有满3个用户调用了该post,如果没有,挂起(等待).如果满了3个.那么这3个一起运行那个doSomething方法.