zoukankan      html  css  js  c++  java
  • JAVA多线程售票问题

    今天在写页面静态化的时候,需要从mysql中查去昨天文章uuid,然后再从es中查询这些uuid的文章信息,再通过freemarker将信息写入html页面.

    在写入页面的时候,考虑到单线程写入文件效率比较低,于是采用多线程方式将信息写入.这里出现了一个问题,这里可能重复的写入相同的html文件,这是不允许的.

    于是想起售票问题.总的uuid(总票数)是确定的,分开每个线程只要保证每个线程获取到的uuid不冲突即可.

    这里有一点和售票问题不同的是,售票只是关心的票数,在这里是要根据index获取list中的值,这里使用ArrayList存在问题.于是采用LinkedList,因为可以使用pop方法

    程序还有两点可以优化:

      1.可以从es中根据uuid将数据一次查出或者分批次查出,然后写入文件,再进行查询

      2.每次写入文件后将信息放在list集合中,最后一次再将信息写入MySQL

    现在贴上售票问题的代码:

    class SaleTicket implements Runnable{
        private int tickets = 100;
        
        
        private synchronized void sale(){
            if(tickets > 0){
                System.out.println(Thread.currentThread().getName() + "卖出 第 "+ (tickets--)+"张票");
                
                try{
                    Thread.sleep(100);
                }catch(InterruptedException e){
                    e.printStackTrace();
                }
            }
        }
        public void run(){
            while(tickets > 0){
                sale();
            }
        }
    }
    
    
    public class JavaTest {
            
        public static void main(String[] args){
    
    
            SaleTicket st = new SaleTicket();
            Thread t1 = new Thread(st, "一号窗口");
            Thread t2 = new Thread(st, "二号窗口");
            Thread t3 = new Thread(st, "三号窗口");
            Thread t4 = new Thread(st,"四号窗口 ");
            t1.start();
            t2.start();
            t3.start();
            t4.start();
            
        
            
        }
    }
  • 相关阅读:
    集合模拟斗地主
    泛型
    Iterator迭代器
    嵌入式应用开发过程中用到的函数
    Keil ,source insight使用技巧等
    Socket应用demo 获取IP
    tftp安装、配置,ubuntu联网设置
    C++基础三——类、结构体、联合体
    C++基础二——清华
    STM32笔记
  • 原文地址:https://www.cnblogs.com/0xcafedaddy/p/6321751.html
Copyright © 2011-2022 走看看