<Java多线程> 多个线程前半部分需要做IO等费时间的操作,想要让这些线程前半部分并行,后半部分按顺序执行,该怎么实现?
比如:
有A,B,C三个线程,需要同时登录到某个网站,登陆是比较耗时,所以想把登录这部分做成并行的
三个线程都登录成功后,按A,B,C的顺序点击不同的三个按钮以上过程怎么用Java实现?难点在于如何让它们按顺序执行

解决方案 »

  1.   

    链接 参考下
    http://blog.csdn.net/u013376508/article/details/50902900
      

  2.   

    你的问题是不是,ABC登录并行执行,但是ABC点击登录按钮是存在先手顺序的,你需要保证ABC登录完成之后,后续处理的流程依然按照当初点击登录按钮的顺序,继续执行?
      

  3.   


    不是,ABC点击登录按钮没有先后顺序,但是后续的处理有先后顺序
      

  4.   

    public class LoginTest {
        private boolean login(String  loginUser){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("loginUser = [" + loginUser + "]");
            return true;
        }    private String getUserList(String  loginUser){
            return "getUserList:"+loginUser;
        }    public static void main(String[] args) {
            String[]  strarr = {"userA","userB","userC"};
            LoginTest loginTest = new LoginTest();
            //主线程 维护请求的先后顺讯
            ThreadLocal<String[]> threadLocal = new ThreadLocal<>();
            threadLocal.set(strarr);
            //登录并发执行
            CountDownLatch countDownLatch = new CountDownLatch(strarr.length);
            for(int i=0;i<strarr.length;i++){            final String user = strarr[i];
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        loginTest.login(user);
                        countDownLatch.countDown();
                    }
                },user).start();
            }
            try {
                //阻塞,等待线程全部执行完成
                countDownLatch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //按序请求顺序执行
            for(String tempUser : threadLocal.get()){
                System.out.println("userList = [" + loginTest.getUserList(tempUser)+ "]");
            }
        }
    }
      

  5.   

    ABC同时登录,只能说登录这个操作是并行的,三个线程启动都存在顺序,没有顺序的情况还真想不出来.我的理解,压根就不可能存在!
      

  6.   


    详细思路呢楼上给了代码了,可以确保在执行A、B、C之前,三个用户的登陆操作已经完成,后边就是并发顺序执行了啊
    A();
    B();
    C();