两个线程每隔一秒钟交替打印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
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
相关文章推荐
- 实现两个线程A,B,A打印5个奇数,B打印5个偶数,交替进行,如此循环50次
- 使用两个线程交替打印0到100的奇数和偶数
- 两个线程交替打印字符串
- 使用Java线程并发库实现两个线程交替打印的线程题
- 08 两个线程交替打印121212...
- linux两个线程交替打印数字
- 使用Java线程并发库实现两个线程交替打印的线程题
- 面试题一:实现两个线程交替打印数字
- 两个线程交替打印ABABAB
- 两个线程交替打印ABCDEF
- 两个线程交替打印ABABAB
- 两个线程的交替打印
- 多线程技术: 两个线程交替打印奇数和偶数
- 两个线程交替打印字母 java
- 两个线程交替执行,一个打印1-52;一个打印A-Z;打印顺序为12A34B56C.....5152Z
- wait,notify实现两个线程交替打印
- 多线程技术: 两个线程交替打印奇数和偶数
- Java实现两个线程交替打印问题
- Java两个线程交替打印(实现Runnable接口)
- 两个线程A和B,任务都是打印当前时间,要求编码实现:线程A和B同时启动后,以先A后B的方式任务交叉执行10次。