java多线程案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuanzhangran/article/details/73839030

什么时候使用多线程:当一个程序 执行很长一段时间,但是程序执行的时候,操作者不想等待这段时间,而是想干些别的事情。此时需要使用多线程。
生成红包案例:
1:这里写图片描述
2:由于红包数量较多,需要占用一段时间。所以要启动线程。
3:点击确认,直接执行线程中的代码。此时可以其他操作,而不影响。
代码如下;

<!-- 生成红包 -->
        <form action="/newRedPacket/savePacket.html" method="post" onsubmit="return checkRecketForm()">       
                 <div class="pop createPacketDiv" id="createPacketDivDiv">
                    <div class="popbg"></div>
                    <div class="layel" style="z-index: 999; width: 800px; margin-left: -400px;">
                        <h3 class="addtitle"><span id="mbtitle2">生成红包</span><i class="closeicon"></i></h3>
                         <div class="row">   
                           <span>红包类型:</span>
                           <input type="hidden" id="redType2" name="redType"/>
                           <input type="hidden" name="redNewType" id="redNewType"/><!-- 红包类型的id -->
                           <span class="selectinput plate" style="width: 100px; margin-left: 20px;">
                                <span class="selectvalue" id="statusSel2">
                                    <c:if test="${empty status}">全部</c:if>
                                    <c:if test="${status==1}">普通红包</c:if>
                                    <c:if test="${status==2}">VIP红包</c:if>
                                </span>
                                <i class="arrow arrowright"></i>
                                <ul class="option statusul">
                                    <li data-id="0" onclick="setstatus2('','全部')">全部</li>
                                    <li data-id="1" onclick="setstatus2(1,'普通红包')">普通红包</li>
                                    <li data-id="2" onclick="setstatus2(2,'VIP红包')">VIP红包</li>
                                </ul>
                            </span>
                                                             名称<select style="WIDTH: 100px" id="title11" name="title" class="selectinput plate" onchange="title111()"><option>请选择</option></select><select style="WIDTH: 100px" id="subMoney11" name="subMoney" class="selectinput plate" onchange="subMoney111()"><option>请选择</option></select><input type="text" name="money" id="money11" class="input-com" disabled="true" style="width: 100px;"><input type="hidden" name="money22" id="money22">    
                        </div>
                        <div class="row" id="glCode2" style="display: none;">
                         <span class="personattr">关联码:</span>
                           <select name="glId" id="glCode3" class="selectinput plate" style="margin-left: 0px;"> 
                                 <option value="9999999">全部</option>
                                  <c:forEach items="${glCodeList}" var="gl" varStatus="st">
                                     <c:if test="${gl.id == glId}">
                                         <option value="${gl.id }" selected="selected">${gl.glCode }</option>
                                    </c:if>
                                    <c:if test="${gl.id != glId}">
                                         <option value="${gl.id }">${gl.glCode }</option>
                                    </c:if>
                                  </c:forEach>
                           </select>
                        </div>
                        <div class="row">
                            <span class="personattr">生成数量:</span>
                           <input type="text" name="counts" id="counts11" class="input-com"></div>
                         <div class="row" id="kouLingDiv">
                            <span class="personattr">口令:</span>
                           <input type="text" name="kouLing" id="kouLing" class="kouLing">
                        </div>
                        <div class="row">
                            <span class="personattr">有效期:</span>                    
                            <input type="radio" name="useType" value="1" onclick="timeStart()" checked="checked">时间阶段
                            <input type="radio" name="useType" value="2" onclick="timeEnd()">固定天数
                        </div>
                        <div class="row" id="timeDiv1" style="display: none;">
                        <span class="personattr">时间阶段</span>
                            <input type="text" onclick="WdatePicker({dateFmt:&quot;yyyy-MM-dd&quot;})"
                             class="input input-medium" name="useStartTime" id="useStartTime" placeholder="开始时间">
                             -
                           <input type="text" onclick="WdatePicker({dateFmt:&quot;yyyy-MM-dd&quot;})"
                             class="input input-medium" name="useEndTime" id="useEndTime" placeholder="结束时间">
                       </div> 
                        <div class="row" id="timeDiv2" style="display: none;">
                            <span class="personattr">固定天数</span>    
                            <input type="radio" name="dayCount" id="dayCount11" value="30">30天
                            <input type="radio" name="dayCount" value="10">10天
                            <input type="radio" name="dayCount" value="7">7天
                        </div>
                        <div class="row">
                            <input type="submit" class="confirm" value="确定" style="margin-left: 0px; margin-top: 30px;">
                        </div>
                     </div>
                    </div>
              </form>

后台代码:

        /**
         * 保存生成的红包
         * @param suRedNewPacket
         * @param model
         * @return
         */
        @RequestMapping("/savePacket.html")
        public String savePacket(
                @RequestParam(value = "redNewType", required = false) final Long redNewType,
                @RequestParam(value = "glId", required = false) final Long glId,
                @RequestParam(value = "counts", required = false) final Integer counts,
                @RequestParam(value = "kouLing", required = false) final String kouLing,
                @RequestParam(value = "useType", required = false) final Byte useType,
                @RequestParam(value = "redType", required = false) final Byte redType,
                @RequestParam(value = "money22", required = false) final Float money,
                @RequestParam(value = "useStartTime", required = false) final String startTime1,
                @RequestParam(value = "useEndTime", required = false) final String endTime1,
                @RequestParam(value = "dayCount", required = false) final String dayCount,
                Model model) {
    Thread t = new Thread(new Runnable(){//创建线程执行以下方法  
       public void run(){//线程的run方法
            Date date = new Date();
            SuRedNewPacket suRedNewPacket = new SuRedNewPacket();
            SuRedGlCode code = new SuRedGlCode();
            if(counts != null && counts != 0){
                for(int i = 0;i<counts;i++){//导入红包个数
                    suRedNewPacket.setRedNewType(redNewType);
                    suRedNewPacket.setCounts(counts);
                    suRedNewPacket.setKouLing(kouLing);
                    suRedNewPacket.setUseType(useType);
                    suRedNewPacket.setMoney(money);
                    Date startTime = null;
                    Date endTime = null;
                    if(StringUtils.isNotBlank(startTime1)){
                        String startTimeStr = startTime1+" 00:00:00";
                        String endTimeStr = "";
                        if(StringUtils.isBlank(endTime1)){
                            endTimeStr =  DateUtil.format(new Date(),"yyyy-MM-dd")+" 23:59:59";
                        }else{
                            endTimeStr = endTime1+" 23:59:59";
                        }
                        startTime = DateUtil.parse(startTimeStr, "yyyy-MM-dd HH:mm:ss");
                        endTime = DateUtil.parse(endTimeStr, "yyyy-MM-dd HH:mm:ss");
                        suRedNewPacket.setUseStartTime(startTime);
                        suRedNewPacket.setUseEndTime(endTime);
                    }else{
                        suRedNewPacket.setUseStartTime(null);
                        suRedNewPacket.setUseStartTime(null);
                    }
                    if(StringUtils.isNoneBlank(dayCount)){
                        suRedNewPacket.setDayCount(Integer.parseInt(dayCount));
                    }
                    //序列号
                    String sequenceNumber = null;
                    sequenceNumber = getCard();//生成12位序列号
                    for (;;){
                        sequenceNumber = checkSequenceNumber(sequenceNumber);
                        if (StringUtils.isNotBlank(sequenceNumber)) {
                            break;
                        }
                    }
                    suRedNewPacket.setSequenceNumber(sequenceNumber);
                    //兑换码
                    String dhm = "";
                    if(redType == 1){//普通红包6位数字加字母
                        dhm = puDhm();
                        suRedNewPacket.setGlId(null);
                    }else if(redType == 2){//vip红包8位数字
                        dhm = returnBarCode();
                        suRedNewPacket.setGlId(glId);
                    }else{
                        suRedNewPacket.setGlId(null);
                    }
                    suRedNewPacket.setDhm(dhm);
                    suRedNewPacket.setCreateDateTime(date);
                    suRedNewPacket.setUpdateTime(date);
                    suRedNewPacket.setStatus((byte)1);
                    suRedNewPacket.setInvalid((byte)0);
                    redNewPacketService.insertSelective(suRedNewPacket);
                }
                code.setId(glId);
                code.setRedUse((byte)1);
                redGlCodeService.updateByPrimaryKeySelective(code);
               }
            }
       });  
        t.start();  //调用此线程
        //返回前台页面,当flag=1的时候。页面显示操作成功。
        return "redirect:/newRedPacket/packetList.html?flag="+1;
        }

猜你喜欢

转载自blog.csdn.net/xuanzhangran/article/details/73839030