首先创建线程售票类,继承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(); } }下面是运行的结果: …