问题及算法策略描述
由于多个线程共享全局变量会带来资源竞争,也就会带来数据混乱等不安全问题。因此通过此编程模拟售票系统对共享资源的并发访问控制。
此次模拟采用java高级语言对多个线程的共享资源进行操作,使用java关键字synchronized 对共享资源进行互斥PV操作,某一时刻仅仅有一个线程在访问和修改代码块中的内 容(加锁),其他所有的线程等待该线程离开代码块时(释放锁)才有机会进入synchronized代码块。同时对其他的线程进行唤醒与排队等待操作。
开发环境
操作系统:Windows 10
开发工具:IntelliJ IDEA 2021.3
编程语言:java
开发运行:jdk1.8
系统的主要功能效果运行截图
系统开辟四个售票窗口,同时出售10张票。也就是开启4个线程共享10张票。实现了多线程安全的共享资源。具体运行效果如下所示
运行截图如下
源程序
项目源码如下所示
/**
* 售票系统共享资源的并发访问控制
* 实现Runnable接口创建线程
*/
public class SellTicket implements Runnable {
private String name;//线程名称
private static Integer count = 10;//共享资源数量
private static Object obj = new Object();//锁
public SellTicket(String name) {
this.name = name;
}
@Override
public void run() {
while (true) {
synchronized (obj) {//互斥锁
try {
Thread.sleep(500);//当前线程休眠500ms
obj.notifyAll();//唤醒其他线程
if (count > 0) {
System.out.println(name + ":正在出售第" + count-- + "张票");
} else {
System.out.println("票已经售完了\t" + name + "已经关闭");
break;
}
obj.wait();//当前线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
System.out.println("=============售票系统共享资源的并发访问控制==================");
//创建开辟四个售票窗口共同出售10张票
SellTicket sell01 = new SellTicket("窗口一");
new Thread(sell01).start();
SellTicket sell02 = new SellTicket("窗口二");
new Thread(sell02).start();
SellTicket sell03 = new SellTicket("窗口三");
new Thread(sell03).start();
SellTicket sell04 = new SellTicket("窗口四");
new Thread(sell04).start();
}
}
有啥不懂得小伙伴们加群交流啦:852665736
无偿免费分享源码以及技术和面试文档,更多优秀精致的源码技术栈分享请关注微信公众号:gh_817962068649