Java多线程基础—买票案例

这段代码是一个简单的多线程同时买票的案例,创建三个线程买票,当票数卖完后另外一个线程负责将票数补回到100。
附上代码:
public class ThreadShare {
public static void main(String[] args) {
ShareDatas shareData = new ShareDatas();
new Thread(new ThreadRunnable1(shareData)).start();
new Thread(new ThreadRunnable2(shareData)).start();
new Thread(new ThreadRunnable2(shareData)).start();
new Thread(new ThreadRunnable2(shareData)).start();
}
}
class ThreadRunnable1 implements Runnable{
private ShareDatas shareData;
public ThreadRunnable1(ShareDatas shareData){
this.shareData = shareData;
}
@Override
public void run() {
while(true){
shareData.increatment();
}
}

}
class ThreadRunnable2 implements Runnable{
private ShareDatas shareData;
public ThreadRunnable2(ShareDatas shareData){
this.shareData = shareData;
}
@Override
public void run() {
while(true){
shareData.decreatment();
}
}

}
class ShareDatas{
private static int data;
public synchronized void increatment(){
System.out.println(“票已经售完请补充”);
while(data>0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
data = 100;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.notify();
}
public synchronized void decreatment(){
while(data<=0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
data–;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+”号窗口正在售票 “+”当前余票是: “+data);
this.notify();
}
}
运行效果:
这里写图片描述

首先main方法创建四个线程,一个实现ThreadRunnable1,另外三个实现ThreadRunnable2。ThreadRunnable1和ThreadRunnable2都是共享一个ShareDatas类,并且都重写了构造器(添加了共享参数data票数)和run()方法。在ShareDatas类中有票数data以及对data操作的两个方法售票的decreatment()以及补票的increatment()。ThreadRunnable1的run()方法中调用的是increatment(),ThreadRunnable2调用了decreatment()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值