模拟售票的过程
这是 SEllTicketDemo
public class SellTicketDemo {
public static void main(String[] args)
{
SellTicket st = new SellTicket();
Thread thread1 = new Thread(st,"窗口1");
Thread thread2 = new Thread(st,"窗口2");
Thread thread3 = new Thread(st,"窗口3");
thread2.setPriority(10);
thread1.start();
thread2.start();
thread3.start();
}
}
这是SellTicket类
public class SellTicket implements Runnable{
private int ticket = 1;
private Object object = new Object();
@Override
public void run() {
while (true)
{
synchronized (object)
{
if(ticket<=100)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() +":正在出售第" + ticket +"张票");
ticket++;
}
else
{
System.out.println("已售完");
}
}
}
}
}
下面是运行的结果
synchronized (object)这个同步代码有问题,锁死了,别的线程进不去。把object改为this
package T13;
/**
* 模拟车站售票系统
*
* */
public class Ticket implements Runnable {
//车票数量
int ticketCount=100;
@Override
public void run() {
saleTicket2();
}
//卖票
public synchronized void saleTicket(){
//临界点,要用互斥锁实现同步
/**
* 1.函数级的同步:synchronized
* 2.语句块的同步:synchronized
* */
try{
while(ticketCount>0){
String name = Thread.currentThread().getName();
ticketCount = ticketCount-1;
System.out.println(name+"卖了一张票,还剩"+ticketCount+"张票");
Thread.sleep(100);
}
}catch(Exception e){
e.printStackTrace();
}
}
public void saleTicket2(){
//临界点,要用互斥锁实现同步
/**
* 1.函数级的同步:synchronized
* 2.语句块的同步:synchronized
* */
try{
while(true){
//需要锁,锁就是一个Object类型的变量
synchronized (this) {//临界点
if(ticketCount<1)
break;
String name = Thread.currentThread().getName();
ticketCount = ticketCount-1;
System.out.println(name+"卖了一张票,还剩"+ticketCount+"张票");
Thread.sleep(10);
}
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(ticket,"售票员1").start();
new Thread(ticket,"售票员2").start();
new Thread(ticket,"售票员3").start();
new Thread(ticket,"售票员4").start();
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y