java多线程案例

来源:互联网 发布:网络信息收集软件 编辑:程序博客网 时间:2024/06/06 00:11

什么时候使用多线程:当一个程序 执行很长一段时间,但是程序执行的时候,操作者不想等待这段时间,而是想干些别的事情。此时需要使用多线程。
生成红包案例:
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;        }