Java实现卖票问题,三人同时卖票,但是不能卖同一张票。
代码如下:
/**
*
*/
package com.jasmyn.demo;
/**
* @author jasmyn
* @date 2020年11月24日上午8:16:13
* @package com.jasmyn.demo
*/
public class Ticket implements Runnable {
int number=100;
private Object mutex=new Object();
private int x=0;
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
if(x%2==0) {
synchronized (mutex) {
try {
Thread.sleep(1000);//暂停一秒
}catch(InterruptedException e) {
e.printStackTrace();
}
if(number>0) {
System.out.println(Thread.currentThread().getName()+"正在销售第"+(number--)+"张票");
}
}
}else {
this.cell();
}
x++;
if(number<0) {
break;
}
}
}
public synchronized void cell() {//同步方法
try {
Thread.sleep(200);//暂停一秒
}catch(InterruptedException e) {
e.printStackTrace();
}
if(number>0) {
System.out.println(Thread.currentThread().getName()+"正在销售第"+(number--)+"张票");
}
}
}
测试代码:
/**
*
*/
package com.jasmyn.demo;
/**
* @author jasmyn
* @date 2020年11月24日上午8:15:34
* @package com.jasmyn.demo
*/
public class TicketTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Ticket ticket=new Ticket();
Thread t1=new Thread(ticket,"za");
Thread t2=new Thread(ticket,"zs");
Thread t3=new Thread(ticket,"zd");
t1.start();
t2.start();
t3.start();
}
}