package cn.bruce.Thread; //多线程售票案例 //解决安全问题,JAVA程序提供了同步技术synchronized(任意对象){线程要操作的共享数据} //同步代码块 public class MoreThreadDemo2 { public static void main(String[] args) { // 创建Runnable接口实现类对象 Tickets t = new Tickets(); // 创建三个Thread类对象,传递Runnable接口实现类 Thread t0 = new Thread(t, "窗口1"); Thread t1 = new Thread(t, "窗口2"); Thread t2 = new Thread(t, "窗口3"); // 开启线程 t0.start(); t1.start(); t2.start(); } } class Tickets implements Runnable { private int number = 100; public void run() { while (true) { payTicket(); } } // 同步方法有锁吗?有的,同步方法中的对象锁就是this(本类对象引用) // 如果方法是静态呢?锁对象不是this,是本类自己.class public synchronized void payTicket() {// 同步方法技术 // 对票数做判断,大于0 可以出售 if (number > 0) { try { Thread.sleep(10);// 使用休眠,模拟CPU切换 System.out.println(Thread.currentThread().getName() + "出售第" + number--); } catch (Exception e) { e.printStackTrace(); } } } }