Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法二)

xiaoxiao2021-02-28  122

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(); } } } }
转载请注明原文地址: https://www.6miu.com/read-47529.html

最新回复(0)