美文网首页
多线程 买票

多线程 买票

作者: 百工之人 | 来源:发表于2019-07-23 09:16 被阅读0次
package com.zuosy.learn;

import java.util.HashMap;
import java.util.Iterator;

public class App {
    public static void main(String[] args) {
        MaiPiao piao = new MaiPiao(150);

        Thread[] threads = new Thread[3];
        String[] threadName = {"DM", "HN", "OL"};
        
        for (int index = 0; index < threads.length; ++index) {
            threads[index] = new Thread(piao); 
            threads[index].setName(threadName[index]);
            piao.AddRecord(threads[index].getName());
        }

        for(Thread thread : threads) {
            thread.start();
        }

        System.out.println("Done");
    }
}

class MaiPiao implements Runnable {

    private Long ticket;
    private HashMap<String, Integer> ticketRecord = 
                    new HashMap<String, Integer>();
    private String threadName;

    public MaiPiao(long ticket) {
        this.ticket = ticket;
    }
    
    public void AddRecord(String thread) {
        ticketRecord.put(thread, 0);
    }
    
    @Override
    public String toString() {
        StringBuffer buffer = new StringBuffer();
        
        Iterator<String> it = ticketRecord.keySet().iterator();
        while (it.hasNext()) {
            String key = it.next();
            buffer.append(key).append(" : ").append(ticketRecord.get(key)).append('\n');
        }
        return buffer.toString();
    }

    public void run() {
//        System.out.println("run:" + this);
        while (true) {
            System.out.println(Thread.currentThread().getName());
            try {
                Thread.sleep((long) (Math.random() * 5));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (this) {
                threadName = Thread.currentThread().getName();
                if (ticket > 0) {
                    System.out.println(threadName + " ticket = " + ticket--);
                    ticketRecord.replace(threadName, ticketRecord.get(threadName) + 1);
                    if (ticket <= 0)
                        break;
                }
                else {
                    System.out.println(Thread.currentThread().getName() + "break");
                    return;
                }
            }
        }

        System.err.println(this);
    }
}

相关文章

  • 多线程 买票

  • Python多线程买票程序实践

    【背景】模拟卖票程序,50个窗口同时卖5000张票从中可以观察5000张票的临界资源怎么被争夺 【运行结果】 运行...

  • 04-线程安全问题

    多线程操作共享的数据,例如买票问题,可能会出现相同的票,或者负数的票。出现这种问题的条件1. 多线程环境2. 多线...

  • 3.多线程的并发问题

    多线程在提高运行效率的同时,也带来了并发问题,所谓并发问题就是多线程操作共享资源,导致数据状态异常。以买票为例,1...

  • 买票

  • 买票

    最近 我发现大多 不是看球赛 而且晒啤酒买足彩 来 哪个好心人透露一下 这把儿买哪只 我也投资2元钱 纠结180分钟

  • 买票

    春运期间,车票异常紧张。小伟早早的就开始每天网上刷票,但每天刚到售票时间,三秒钟所有的车票就售罄了。 买票成了小伟...

  • 买票

    我今年五十五岁,任职于西安交大的副教授一职。这周三我将要前往西大的户县的分校,并给那儿的大学生们上一堂辅导...

  • 买票

    年关将至,买票回家是很重要的一件事情。现如今买票便捷了,取票的时候,我注意到不用再排队买票的父亲在车站徘徊。 很多...

  • 买票

    今天晚上给阿爸买车票,在合适的日期里,只剩下一张了。赶紧买了,然后给他打了个电话说票已买好。 电话那头传来迷迷糊糊...

网友评论

      本文标题:多线程 买票

      本文链接:https://www.haomeiwen.com/subject/msvnlctx.html