多线程售票
首先创建线程售票类,继承Runnable接口,编写run()方法。
用一个静态变量ticketNumber来表示票的数量,通过添加同步锁来解
决线程安全问题,在添加锁后一定要释放锁。
import java.util.Date;
import java.util.concurrent.locks.*;
public class thread_safe implements Runnable{
private int ticketNumber=100;
private Lock lock=new ReentrantLock(true); //true表示所有的线程可以公平竞争
@Override
public void run() {
while(true) {
lock.lock();
try {
if(ticketNumber>0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String name=Thread.currentThread().getName();
System.out.println("线程"+name+"销售电影票"+ticketNumber--);
}
}finally{
lock.unlock();
}//释放锁
}
}
}
用一个测试类创建几个实例,调用线程开始,运行后就会出现几个
线程同时卖票,且不会出现线程安全问题
public class test_safe {
public static void main(String[] args) {
thread_safe ticket=new thread_safe();
Thread thread=new Thread(ticket,"窗口1");
thread.start();
Thread thread2=new Thread(ticket,"窗口2");
thread2.start();
Thread thread3=new Thread(ticket,"窗口3");
thread3.start();
}
}
下面是运行的结果:
…