这段代码是一个简单的多线程同时买票的案例,创建三个线程买票,当票数卖完后另外一个线程负责将票数补回到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()。