u013348817
当如王守仁
采纳率100%
2016-02-03 03:30 阅读 1.5k
已采纳

java 主函数中启动第二个线程,然后主函数继续向下执行,不关心第二个线程的状态,要怎么写

需求是这样的,请求过来,先将所有的数据存下来,启动第二个线程去处理数据,主函数里面不关心第二个线程是否处理完成,直接返回成功,这样怎么写

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    leilba 林深 2016-02-03 03:38

    你可以采取这样的操作:

    YourData yourData;
         boolean requestDeco(YourData yourData) {
                    //存一份
                    this.yourData = yourData;
                    //交给线程处理
            new SecondThread(yourData).start();
                    //返回成功
            return true;
        }
    
        class SecondThread extends Thread {
            YourData yourData;
            public SecondThread(YourData yourData) {
                this.yourData = yourData;
            }
    
            @Override
            public void run() {
                //
                // do secondThread
            }
        }
    
    点赞 1 评论 复制链接分享
  • gary16 gary162 2016-02-03 03:36

    你开了线程,本来就不用等它完成了

    点赞 评论 复制链接分享
  • u013348817 当如王守仁 2016-02-03 03:38

    没有啊,我试了一下,让线程sleep 10秒,主函数就等了10秒才返回的啊

    点赞 评论 复制链接分享
  • u013348817 当如王守仁 2016-02-03 03:42

    map.put("batchList", batchList);
    msgServiceMapper.batchSave(map); //先保存数据库
    SendMsgThread send = new SendMsgThread(batchMessage, supplierModel);
    send.run();
    ResponseStatus responseStatus = ResponseStatus.Success;
    msgServiceMapper.updateSendStatus(responseStatus.toString(), reqId);

        return responseStatus;
    
    点赞 评论 复制链接分享
  • fk002008 lambda-fk 2016-02-03 04:46

    你的主函数怎么写的贴出来看看

    线程开启之后和原来的函数所在的线程就是并行的.
    如果你的问题是主函数等待那么可能是你把sleep加到主函数的线程上面去了

    你看如下代码

        public static void main(String[] args) {
    
            System.out.println(test2());
    
        }
    
    
        public static String test2() {
            new Thread() {
                public void run() {
                    System.out.println("thread1");
                }
            }.start();
    
            new Thread() {
                public void run() {
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("thread2");
                }
            }.start();
            System.out.println("end");
            return "OK";
        }
        ```
    执行结果是
    thread1
    end
    OK
    //几秒过后输出
    thread2
    
    
    
    点赞 评论 复制链接分享

相关推荐