package com.up366.thread.example;
import java.util.concurrent.Semaphore;
/**
* Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数
* Created by 一页书 on 2017/7/9.
*/
public class DigitPrinterExample {
static int i =
1;
public static void main(String[] args) {
Semaphore oddSemaphore =
new Semaphore(
1);
Semaphore evenSemaphore =
new Semaphore(
0);
new Thread(
new DigitPrinter(i,oddSemaphore,evenSemaphore)).start();
new Thread(
new DigitPrinter(i,evenSemaphore,oddSemaphore)).start();
}
}
/**
* 打印线程
*/
class DigitPrinter implements Runnable{
static int num;
Semaphore curSemaphore;
Semaphore nextSemaphore;
public DigitPrinter(
int num, Semaphore curSemaphore,Semaphore nextSemaphore) {
this.num = num;
this.curSemaphore = curSemaphore;
this.nextSemaphore = nextSemaphore;
}
@Override
public void run() {
while (num <=
100){
try {
curSemaphore.acquire();
System.out.println(num);
++num;
nextSemaphore.release();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}