您的位置:首页 > 其它

两个线程每隔一秒钟交替打印5个数

2015-03-31 21:12 351 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: