多线程并发之抢火车票案例--解决方案一(同步代码块解决)

package com.thread;
/**
* 抢票示例
* @author 11011844
*
*/
class ThreadTrain implements Runnable {
private Object obj =new Object();
private int trainCount=100; //设置100张火车票
public void run() {
while(trainCount>0){//开始出售票
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//出售票
sale();
}
}
private void sale() {
synchronized (obj) {//同步多线程共享全变量
if(trainCount>0){
System.out.println(Thread.currentThread().getName()+",出售第"+(100-trainCount+1)+"票");
trainCount--;
}
}
}
}



public class SynchronizedDmeo {
public static void main(String[] args) {
ThreadTrain threadTrain=new ThreadTrain(); //实例抢票:(多线程共享同一个全局变量,进行写的操作。)
Thread t1=new Thread(threadTrain,"窗口1");
Thread t2=new Thread(threadTrain,"窗口2");
t1.start();
t2.start();
}
}
【多线程并发之抢火车票案例--解决方案一(同步代码块解决)】总结:这个方式比较容易实现,但是性能比较差。

    推荐阅读