• 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();
            
        
            
        }
    }
  • 相关阅读:
    zend guard加密使用方法
    在网页中嵌入任意字体(特殊字体/自定义字体)的解决方案
    lamp一键安装包
    PHP错误“This file has expired”的解决方法
    php采集
    smarty建的mvc环境
    sql语句操作数据库重复数据
    古语:花繁柳密处拨得开,才是手段;风狂雨急时立的定,方显脚跟。
    获取日期的jquery.ui.datepicker
    el表达式简介
  • 原文地址:https://www.cnblogs.com/0xcafedaddy/p/6321751.html
Copyright © 2020-2023  润新知