<Java多线程> 多个线程前半部分需要做IO等费时间的操作,想要让这些线程前半部分并行,后半部分按顺序执行,该怎么实现?
比如:
有A,B,C三个线程,需要同时登录到某个网站,登陆是比较耗时,所以想把登录这部分做成并行的
三个线程都登录成功后,按A,B,C的顺序点击不同的三个按钮以上过程怎么用Java实现?难点在于如何让它们按顺序执行
比如:
有A,B,C三个线程,需要同时登录到某个网站,登陆是比较耗时,所以想把登录这部分做成并行的
三个线程都登录成功后,按A,B,C的顺序点击不同的三个按钮以上过程怎么用Java实现?难点在于如何让它们按顺序执行
http://blog.csdn.net/u013376508/article/details/50902900
不是,ABC点击登录按钮没有先后顺序,但是后续的处理有先后顺序
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)+ "]");
}
}
}
详细思路呢楼上给了代码了,可以确保在执行A、B、C之前,三个用户的登陆操作已经完成,后边就是并发顺序执行了啊
A();
B();
C();