java多線程(6)模擬排隊叫號程序,4個線程都干活並且結果正確


package com.com.wangwenjun.concurrent.chapter04;

import java.util.Random;
import java.util.concurrent.TimeUnit;

/**
* @description: for循環主要解決的是線程的生命周期完成后又進行一輪
* @author:
* @create:
**/

public class TicketWindowRunnable implements Runnable{

private int index = 1;
private boolean change = true;

private final static int MAX = 50;

private final static Object MUTEX = new Object();

@Override
public void run() {
synchronized(MUTEX){
while(index <= MAX && change ){
System.out.println(Thread.currentThread().getName() + " 的號碼是: " +(index++));

try {
// TimeUnit.MILLISECONDS.sleep(new Random().nextInt(1000));
TimeUnit.MILLISECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}

change = false;
}
change = true;

}
}

public static void main(String[] args){
final TicketWindowRunnable task = new TicketWindowRunnable();

//4為線程個數據,也就是要循環至少13次
for(int i = 0; i < MAX/4 + 1; i++){

Thread windowThread1 = new Thread(task, "一號窗口");
Thread windowThread2 = new Thread(task, "二號窗口");
Thread windowThread3 = new Thread(task, "三號窗口");
Thread windowThread4 = new Thread(task, "四號窗口");

windowThread1.start();
windowThread2.start();
windowThread3.start();
windowThread4.start();

}

}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM