多线程暂停,等待条件成熟,一起运行。这个如何实现?比如,一个入口,访问dosome()方法。当访问的次数少于3次,这2个线程等待着。等待第三个访问时,一起运行。这个如何实现啊?
解决方案 »
- ZipOutputStream close 与 finish的区别是什么?finish的使用场景是什么?
- 新手问题:在排序好的数组中添加一个数字,将添加后的数字插入到数组合适的位置
- JCreator打印代码~中文出现“□”怎么办?
- jre1.5.0_02与jre1.6.0_07可以删掉一个吗?
- ComboBox类的序号问题
- 菜鸟问题百分相赠
- 我用了urlConnection对象联接某个http的地址,但是有时候页面会连接很慢,有没有什么办法设定timeout之类的东西,谢谢
- 再问一个问题,我想调用java.awt.accessibility.*,系统提示说Package not found in,不知道是为什么?
- javascript是否没有象vb的运算符\的运算符
- JDK6现在还能用吗?谁那里有可以给一份吗?谢谢
- runtime与外部应用程序交互的问题
- 同步 synchronized 的问题
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();
}
}
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();
}
}你自己运行下,这个我已经测试好了。