多个线程前半部分需要做IO等费时间的操作,想要让这些线程前半部分并行,后半部分按顺序执行,该怎么实现?

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

以上过程怎么用Java实现?难点在于如何让它们按顺序执行
...全文
312 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
蜗牛足迹 2017-11-15
  • 打赏
  • 举报
回复
为什么都不给分啊?难道讲的不对,或不详细吗?
xinxianquan222222 2017-10-20
  • 打赏
  • 举报
回复
引用 3 楼 w_shi 的回复:
你的问题是不是,ABC登录并行执行,但是ABC点击登录按钮是存在先手顺序的,你需要保证ABC登录完成之后,后续处理的流程依然按照当初点击登录按钮的顺序,继续执行?
不是,ABC点击登录按钮没有先后顺序,但是后续的处理有先后顺序
xinxianquan222222 2017-10-20
  • 打赏
  • 举报
回复
引用 1 楼 zc881124 的回复:
链接 参考下 http://blog.csdn.net/u013376508/article/details/50902900
如果线程个数很多的话,这样写是不是很麻烦了
xinxianquan222222 2017-10-20
  • 打赏
  • 举报
回复
引用 2 楼 l359122505 的回复:
可以用线程计数器
详细思路呢
蜗牛足迹 2017-10-20
  • 打赏
  • 举报
回复
你的问题是不是,ABC登录并行执行,但是ABC点击登录按钮是存在先手顺序的,你需要保证ABC登录完成之后,后续处理的流程依然按照当初点击登录按钮的顺序,继续执行?
繁华终归落尽 2017-10-20
  • 打赏
  • 举报
回复
可以用线程计数器
110成成 2017-10-20
  • 打赏
  • 举报
回复
链接 参考下 http://blog.csdn.net/u013376508/article/details/50902900
繁华终归落尽 2017-10-20
  • 打赏
  • 举报
回复
引用 4 楼 xinxianquan222222 的回复:
[quote=引用 2 楼 l359122505 的回复:] 可以用线程计数器
详细思路呢[/quote] 楼上给了代码了,可以确保在执行A、B、C之前,三个用户的登陆操作已经完成,后边就是并发顺序执行了啊 A(); B(); C();
蜗牛足迹 2017-10-20
  • 打赏
  • 举报
回复
ABC同时登录,只能说登录这个操作是并行的,三个线程启动都存在顺序,没有顺序的情况还真想不出来.我的理解,压根就不可能存在!
蜗牛足迹 2017-10-20
  • 打赏
  • 举报
回复
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)+ "]"); } } }

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧