java 多線程 四個窗口賣100張票
public class IOTest {
public static void main(String[] args) {
TicketSell t1 = new TicketSell();
TicketSell t2 = new TicketSell();
TicketSell t3 = new TicketSell();
TicketSell t4 = new TicketSell();
t1.setName("第一號窗口");
t2.setName("第二號窗口");
t3.setName("第三號窗口");
t4.setName("第四號窗口");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class TicketSell extends Thread{
private static int ticket = 100;
@Override
public void run() {
//在循環開始外圍進行同步代碼塊,當第一個線程進入的時候,因爲一直在循環所以代碼沒有執行完
//其他的線程不能執行該同步代碼塊的代碼
while(ticket>0) {
synchronized (TicketSell.class) {
if(ticket>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.getName()+"賣出第 "+ticket +"號票");
ticket--;
}else{
break;
}
}
}
}
}
4個線程一起賣 1000張票,每賣出100張。票價漲100,原價500.最後打印每個線程賣出的票和總錢數
/**
* @Auther: liuhaidong
* Data: 2020/3/2 0002、18:12
* Description:
* @version: 1.0
*/
public class IOTest {
public static void main(String[] args) {
TicketSell t1 = new TicketSell();
TicketSell t2 = new TicketSell();
TicketSell t3 = new TicketSell();
TicketSell t4 = new TicketSell();
t1.setName("第一號窗口");
t2.setName("第二號窗口");
t3.setName("第三號窗口");
t4.setName("第四號窗口");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class TicketSell extends Thread{
private static int ticket = 1000;
private static int index =0;
private static int money = 500;
@Override
public void run() {
//在循環開始外圍進行同步代碼塊,當第一個線程進入的時候,因爲一直在循環所以代碼沒有執行完
//其他的線程不能執行該同步代碼塊的代碼
while(ticket>0) {
synchronized (TicketSell.class) {
if(ticket>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
money = (int) (Math.floor(index/100)*100)+500;
System.out.println(this.getName()+"賣出第 "+ticket +"號票"+money+"票錢");
++index;
ticket--;
}else{
break;
}
}
}
}
}