整个流程是这样的,循环从一个文件中读取数据,每读6万条后就要暂停,启动三个线程(每次仅允许三个线程同时处理)来处理这6万条数据,处理结束后,再继续读。。。循环这样直到文件中数据全部处理完。大家帮忙看看,有什么问题没,例如处理流程、并发。。。等方面,多谢!
public class CopyOfTest { public static void main(String[] args) { Producer p = new Producer(); while(p.producer() > 0){ p.cunsumer(); } } } class Producer { private Lock lock = new ReentrantLock(); private Condition notEmpty = lock.newCondition(); private Condition notFull = lock.newCondition(); private List<List<String>> dataList = null; private BufferedReader reader; private static ExecutorService executor = Executors.newFixedThreadPool(3); public Producer() { try { reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("D:/11.txt")), "GBK")); dataList = new ArrayList<List<String>>(); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } } public int producer() { String text = ""; List<String> tmp = new ArrayList<String>(); int count = 0; lock.lock(); try { try { System.out.println("+++++++++++"); if (dataList.size() == 0) { notEmpty.signalAll(); } if (dataList.size() == 3) { try { notFull.await(); } catch (InterruptedException e) { e.printStackTrace(); } } while ((text = reader.readLine()) != null) { count++; System.out.println(count + "+++" + text); tmp.add(text); if (count % 20000 == 0) { dataList.add(tmp); tmp = new ArrayList<String>(); } if (dataList.size() == 3) { break; } } if (count % 60000 != 0) { dataList.add(tmp); } tmp = null; } catch (IOException e1) { e1.printStackTrace(); } if (dataList.size() < 1) { executor.shutdown(); } return dataList.size(); } finally { lock.unlock(); } } public void cunsumer() { lock.lock(); int len = dataList.size(); Future<?>[] futureArr = new Future<?>[len]; try { if (dataList.size() == 0) { try { notEmpty.await(); } catch (InterruptedException e) { e.printStackTrace(); } } if (dataList.size() == 3) { notFull.signalAll(); } for (int i = 0; i < len; i++) { futureArr[i] = executor.submit(new SingleThread12(dataList.get(i))); } boolean flag = true; while (flag) { for (Future<?> f : futureArr) { flag = flag && f.isDone(); } flag = !flag; } dataList = new ArrayList<List<String>>(); } finally { lock.unlock(); } } }
相关推荐
有问题的QT程序 这个程序的功能是客户端向服务器发送一个字符串,服务器接收到这个字符串之后,进行处理(复制一个相同的...(提示说不能向别的线程发送信号/数据,但我所有的问题都是在同一个线程里面处理的啊?)
多线程有bug 下载结束后 自动关闭软件 不急着要的话 建议单线程比较稳定 小米的cookie 打开云相册 刷新后 按f12 抓包获取 小米cookie 有时效 有一个接口可以直接获取 等v2.0后发布更新 大家先用着 昨天其实也发布...
在标题中提到的问题,即"在WIN7下会黑屏共享后希望能有大拿帮忙解决一下",这可能是因为在尝试使用VFW进行摄像头共享时遇到了显示异常。在Windows 7中,摄像头的访问通常推荐使用DirectShow或Media Foundation,因为...
这段代码是百度好友为我解惑帮忙写的两份聊天软件的其中之一,两个功能是一样的,完全可以实现点对点的聊天,只不过一个是用到了异步另一个是多线程同步(其实我觉得通过多线程控制窗体会使得程序清晰易懂,虽说会...
在那个时候基础不好(没学过操作系统),对jvm和多线程只是死记硬背,很多概念根部不理解 只有系统的学习,才能更深的理解 提升 高并发架构(消息队列,搜索引擎,缓存,数据库高级)->分布式系统->springcloud微服务 ->k8s ...
标题中的"Project"通常指的是一个软件开发项目,这可能是一个包含多个组件的复杂系统,而描述中的"帮帮忙吧,谢谢"则暗示了用户可能在处理这个项目时遇到了问题,需要帮助解决。从标签"1"来看,它可能是对项目阶段、...
他可以利用多线程策略,邀请同事帮忙排队,提高购票成功率。此外,小王还可以考虑其他交通方式,如飞机、汽车等,灵活应对。 2. **运用人际关系网络**:在社会关系网络中寻求帮助是提升执行力的一种方法。小王可以...
这个问题是由于您的证书安装不正确导致,请重新下载证书,并按里面的“SRCA根证书安装说明手册”重新安装即可解决问题。如果还不行,这也是您自己电脑的问题,请联系您的网络管理员或者与我们的客服取得联系以取得...
3、**本次更新包括数据库读写的权限控制,测试环境有限,有问题再改进,这个只是个雏形,后期还会更强。 4、**主要演示文件是服务端和网盘,请详细阅读。 ================ [2020-2-4日] ================ 1、**...
我在简书的博客中写了一系列总计六篇的CoreData文章,总字数大概3W+,从CoreData的基础使用到使用进阶,再到多线程、版本迁移等高级用法,讲解非常详细。 但CoreData的学习还是应该偏实践,我根据博客中讲到的知识点...
11、修复“线程_等待”命令注释反的问题,返回真表示线程结束,假表示已超时。感谢易友【tone】反馈。 12、修复“类_识图->找图_从字节集”命令,载入大文件直接奔溃的BUG,感谢易友【tone】反馈。 精易模块 V3.80...
3. **神枫炼狱新手必看.txt**:这个文本文件极有可能是简洁明了的新手教程,涵盖了一些基本操作、游戏设定和注意事项,对于初入游戏的玩家来说是非常实用的参考资料。 综上所述,这篇内容不仅讲解了如何提升百度...
- **多路IO复用**是一种同步IO技术,它允许一个线程通过记录多个IO流的状态来管理多个IO操作。值得注意的是,异步IO必定是非阻塞的,不存在所谓的“异步阻塞”。 #### 多种IO模型示例 - **阻塞IO**:形象地比喻为...
1. 提出问题:当遇到编程难题时,用户可以详细描述问题,设定悬赏金额,吸引更多有经验的开发者来帮忙解决。 2. 回答问题:擅长特定领域的用户可以浏览悬赏问题,提供解决方案,获取悬赏奖励,并在解决问题的过程中...
**应用场景**:多线程环境下的资源管理。 ##### 5. **工厂方法模式 (Factory Method Pattern)** 定义一个创建产品对象的接口,但让实现这个接口的类决定具体实例化哪一个类。工厂方法让类的实例化推迟到子类。 **...
my-python-practicessimplemultithreadsCrawler.py:一个简单的多线程生产者消费者爬虫,实际使用的时候可以重写parser的parse_links方法,来写自己的解析规则,然后将解析后将继续要爬的地址放入url队列,生产者会...
从标题和描述来看,这似乎是一个遇到了问题的小游戏项目。让我们来探讨一下可能出错的地方,并提供一些排查错误的策略。 首先,让我们分析`main.c`这个文件。它是C程序的主要入口点,包含了程序的主函数`main()`。...
如果您觉得本文对您有帮助,想让更多人了解Exceptionless,感谢您帮忙点的【推荐】。如果您对 Exceptionless 感兴趣或者是想学习 Exceptionless 的代码,可以加入群Exceptionless QQ群:330316486。 ...
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 **应用场景**: - 多级审批; - HTTP服务器的过滤器。 ##...