标签:synchronized wait notify executorservice
package test.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExecutorTest {
private static int i=0;
private static final int PRINT_COUNT=5;
private static final int CYCLE_COUNT=50;
private static Object synchronizer=new Object();
public static void main(String[] args) {
ExecutorService service=Executors.newFixedThreadPool(2);
service.execute(new Runnable(){
public void run(){
int j=0;
synchronized(synchronizer){
while(i++<CYCLE_COUNT){
if(j++<PRINT_COUNT){
System.out.println("1:"+i);
if(j==PRINT_COUNT){
System.out.println();
}
}else{
i--;
j=0;
synchronizer.notify();
try {
Thread.sleep(1000);
synchronizer.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if(i>=50){
synchronizer.notify(); //唤醒最后处于等待状态的线程
}
}
}
});
service.execute(new Runnable(){
public void run(){
synchronized(synchronizer){
int j=0;
while(i++<CYCLE_COUNT){
if(j++<PRINT_COUNT){
System.out.println("2:"+i);
if(j==PRINT_COUNT){
System.out.println();
}
}else{
i--;
j=0;
synchronizer.notify();
try {
Thread.sleep(1000);
synchronizer.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if(i>=50){
synchronizer.notify(); //唤醒最后处于等待状态的线程
}
}
}
});
service.shutdown();
}
}
输出结构:
1:1
1:2
1:3
1:4
1:5
2:6
2:7
2:8
2:9
2:10
1:11
1:12
1:13
1:14
1:15
2:16
2:17
2:18
2:19
2:20
1:21
1:22
1:23
1:24
1:25
2:26
2:27
2:28
2:29
2:30
1:31
1:32
1:33
1:34
1:35
2:36
2:37
2:38
2:39
2:40
1:41
1:42
1:43
1:44
1:45
2:46
2:47
2:48
2:49
2:50
标签:synchronized wait notify executorservice
原文地址:http://blog.csdn.net/zhangheliang2010/article/details/44785789