over pub lag catch println div trace stack static
一、抢票类:
- package cn.jbit.ticket;
- public class Ticket implements Runnable {
- private int num = 0; // 出票数
- private int count = 10; // 剩余票数
- boolean flag = false;
- @Override
- public void run() {
- while (true) {
- // 没有余票时,跳出循环
- if (count <= 0) {
- break;
- }
- num++;
- count--;
- try {
- Thread.sleep(500);// 模拟网络延时
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- System.out.println("显示出票信息:" + Thread.currentThread().getName()
- + "抢到第" + num + "张票,剩余" + count + "张票");
- }
- }
- }
二、测试类:
- package cn.jbit.ticket;
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- Ticket ticket = new Ticket();
- // 实例化几个抢票用户
- Thread mary = new Thread(ticket, "玛丽");
- Thread jack = new Thread(ticket, "杰克");
- mary.start();
- jack.start();
- }
- }
不使用线程同步的代码,结果如下:多个人会抢到同一张票
使用线程同步的话,代码如下:
- package cn.jbit.ticket;
- public class Ticket implements Runnable {
- private int num = 0; // 出票数
- private int count = 10; // 剩余票数
- boolean flag = false;
- @Override
- public void run() {
- while (true) {
- synchronized (this) {
- // 没有余票时,跳出循环
- if (count <= 0) {
- break;
- }
- num++;
- count--;
- try {
- Thread.sleep(500);// 模拟网络延时
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- System.out.println("显示出票信息:" + Thread.currentThread().getName()
- + "抢到第" + num + "张票,剩余" + count + "张票");
- }
- }
- }
- }
效果如下:
Java中的多线程 模拟网络抢票代码
来源: http://www.bubuko.com/infodetail-2327138.html