多线程同时调用同一个方法读取不同对象数据怎么确保多线程线程执行完之后在执行其他逻辑。

比如说有100个电表,我要读取电表的读数,我创建100个线程,都调用同一个读取参数的方法,怎么让他在读完所有电表的读数后在执行后面的其他代码。如何实现我说的这种场景,面试时被问到的

4个回答

加锁,同步锁有内置锁如 synchronized 和显式锁 如 Lock 及其子类。而且要保证所有对电表数的操作都是被同一个锁保护的。
如有兴趣,可以看看这个:Java 并发编程入门攻略

用一个容器保存你创建的线程,所有线程开始运行后写个循环,遍历调用thread.join方法,所有线程执行完后循环结束

CountdownLatch CyclicBarrier

这里最好用到线程池,今天可能去查100个电表,明天有可能就去200个电表。用一个动态线程池:
ThreadPoolExecutor executor =
new ThreadPoolExecutor(电表数, 电表数, 200, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1));

                             for(int i=0;i<issue;i++){
                                                    try {
                                                                UploadThead  uploadThead = new UploadThead(参数);//线程要执行的方法(查表方法类)
                                                                    executor.execute(uploadThead);
                                                    } catch (Exception e) {

                                                            }
                                        }
            System.out.println("主线程判断池中正活动线程数:" + executor.getActiveCount());
            System.out.println("主线程判断池中已完成线程数:" + executor.getCompletedTaskCount());
                         //主线程等待子线程全部执行完
      a:for (int j = 0; j < 查表超时时间; j++) {
            if (executor.getActiveCount() <= 0) {
                                                                System.out.println("所有线程执行完毕");

                                                executor.shutdown();
                                                break a;//执行任务后面代码
                            }
                            try{
                            Thread.sleep(1000)
                            }catch(){
                            }

}
//后面业务代码
。。。。。。。

还有哪不明白?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

3
新手 Java 多线程
1
求多个线程读写HBase 1.2.0的同一个cell方法?
1
通过调用多线程,发现list中集合数据有3万多,但实际调用确只有1万左右,谁能帮忙解决一下
2
是开两次多线程分别处理两个服务消耗大,还是开一次多线程一次性处理两个服务消耗大啊?
1
多线程同一个程序,但只运行了一个
3
关于Java多线程的join()方法的问题
1
python3 怎样用threading多线程处理同一数据
2
嵌入式多线程开发,多线程共享数据什么时候需要使用volatile?
2
多线程直接继承Thread类方式设计一个线程例子,在例子中构造4个线程对象实现对同一数据类对象进行操作
1
python3 在多线程下如何防止在更新或插入数据库时使数据不同步
2
如何把socket通讯接收到的数据放在缓存里,然后用另一个线程读取缓存来进行数据库的写入操作
1
调用线程无法访问对象问题?
0
java多线程同时更新和查询数据库并发
1
多线程调用repaint方法无效
0
请问JAVA中native方法对线程和JNI的解析和在CodeCache的保存有何影响和不同?
1
多线程同时访问同一个成员变量的问题
1
java后端利用多线程,通过 modbus协议 采集数据?
1
请问windows下C++中如何让子线程中的对象调用自身的一个方法?
2
小白请大家给一点思路,关于c#多线程编程
3
C++ stream是多线程不安全的,我要怎么才能实现成多线程安全的呢?