CountDownLatch 控制多线程 让多个线程执行完后再依次做其他的
2012-05-31 21:57
459 查看
package com.ps;
import java.util.concurrent.CountDownLatch;
public class TestRunnable implements Runnable{
private int tickets = 100;
String s = new String(" ");
CountDownLatch cdl = new CountDownLatch(10);//这里的10和下面要启动的线程数必须一样
@Override
public void run() {
// TODO Auto-generated method stub
while(tickets>0){
synchronized(s){
if(tickets>0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() +"is saling tickets "+tickets--);
}
}
}
cdl.countDown();
}
public static void main(String[] args){
TestRunnable testRunnable = new TestRunnable();
for(int i=0;i<10;i++){
new Thread(testRunnable).start();
}
try {
System.out.println(testRunnable.cdl.getCount());
testRunnable.cdl.await();//如果不用countdownlatch的await控制,下面的操作会和多线程并行
System.out.println("等十个线程完后再做做其他的");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.util.concurrent.CountDownLatch;
public class TestRunnable implements Runnable{
private int tickets = 100;
String s = new String(" ");
CountDownLatch cdl = new CountDownLatch(10);//这里的10和下面要启动的线程数必须一样
@Override
public void run() {
// TODO Auto-generated method stub
while(tickets>0){
synchronized(s){
if(tickets>0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() +"is saling tickets "+tickets--);
}
}
}
cdl.countDown();
}
public static void main(String[] args){
TestRunnable testRunnable = new TestRunnable();
for(int i=0;i<10;i++){
new Thread(testRunnable).start();
}
try {
System.out.println(testRunnable.cdl.getCount());
testRunnable.cdl.await();//如果不用countdownlatch的await控制,下面的操作会和多线程并行
System.out.println("等十个线程完后再做做其他的");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
相关文章推荐
- CountDownLatch--控制三个线程执行顺序(三)
- java中结合单例模式,控制单例类的某方法在被多线程调用时,只被1个线程调用执行,执行完毕后才被另一线程调用
- CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待
- 【Java多线程编程】主线程对其他线程的控制
- java中结合单例模式,控制单例类的某方法在被多线程调用时,只被1个线程调用执行,执行完毕后才被另一线程调用
- GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断
- 使用 CountDownLatch 控制多个线程执行顺序
- 多线程 不使用同步工具, 手动协调线程依次执行
- java 多线程控制线程执行顺序
- 使用 CountDownLatch 控制多个线程执行顺序
- 多线程线程池控制一个方法的并发量 限制只有5个线程执行任务
- 使用 CountDownLatch 控制多个线程执行顺序
- Java多线程系列四——控制线程执行顺序
- 多线程中如何保证某段程序 连续执行,不被其他线程干扰
- CountDownLatch使用countDown方法来触发其他等待线程再执行的问题
- CountDownLatch--一组线程完成后其他线程才执行(二)
- CountDownLatch 控制多个线程执行顺序
- CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
- Java多线程(二)、线程的生命周期和状态控制
- Java 多线程实现的三种方法,附两个线程执行不同的输出