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); /* 只有奇数信号量的初始资源数为1,保证从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(); /* 请求打印需要的信号量,资源数-1,即down操作 */
System.out.println(num);
++num;
nextSemaphore.release(); /* 释放下一个线程打印需要的信号量,资源数+1,即up操作 */
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法二)
最新推荐文章于 2024-02-20 15:04:48 发布