Java线程同步卖票问题解决方法

来源:互联网 发布:淘宝卖家账号多少钱 编辑:程序博客网 时间:2024/04/30 23:35

1、使用同步代码块进行卖票:

/** * <p>java线程同步卖票</p> */public class TicketsCodeBlock implements Runnable {    private int count = 100; //总票数目    public static void main(String[] args) {        TicketsCodeBlock tickets = new TicketsCodeBlock();        Thread t1 = new Thread(tickets);        Thread t2 = new Thread(tickets);        Thread t3 = new Thread(tickets);        t1.start();        t2.start();        t3.start();    }    public void run() {        for (int i = 0; i < 10; i++) {            synchronized (this) { // 同步代码块                if (count > 0) {                    try {                        Thread.sleep(500); // 500ms                    } catch (Exception e) {                        e.printStackTrace();                    }                    Thread t = Thread.currentThread();                    System.out.println(t.getName() + " 剩余票的数目: " + (count--));                }            }        }    }}

2、使用同步方法进行卖票:

/** * <p>java线程同步买票的问题</p> */public class TicketsMethod implements Runnable {    private int count = 100; //总票数目    public static void main(String[] args) {        TicketsMethod tickets = new TicketsMethod();        Thread t1 = new Thread(tickets);        Thread t2 = new Thread(tickets);        Thread t3 = new Thread(tickets);        t1.start();        t2.start();        t3.start();    }    public void run() {        for (int i = 0; i < 10; i++) {            sale();        }    }    /**     * <p>使用同步方法进行卖票</p>     */    public synchronized void sale() {        if (count > 0) {            try {                Thread.sleep(500); // 500ms            } catch (Exception e) {                e.printStackTrace();            }            Thread t = Thread.currentThread();            System.out.println(t.getName() + " 剩余票的数目: " + (count--));        }    }}
0 0