当前位置: 首页 > 知识库问答 >
问题:

用三个线程处理文件

董光霁
2023-03-14
ExecutorService executor1 = Executors.newSingleThreadExecutor();
        ExecutorService executor2 = Executors.newSingleThreadExecutor();
        ExecutorService executor3 = Executors.newSingleThreadExecutor();
        ArrayBlockingQueue<String> abq = new ArrayBlockingQueue<String>(1000);
        try {

             String line;
             InputStream is = file.getInputStream();
             br = new BufferedReader(new InputStreamReader(is));
             while ((line = br.readLine()) != null) {
                 String[] values = line.split(",");
                 List<String> valuesList = Arrays.asList(values);
                 for(String valueList : valuesList) {
                     abq.put(valueList);
                     executor2.execute(new Runnable () {
                         public void run() {
                             System.out.println(valueList + Thread.currentThread().getName());
                         }
                     });       
  1. 从主线程读取文件
  2. 将读取值存储到blockingqueue中,另一个线程将从中访问和处理。
  3. 有另一个线程要写入另一个文件。
    但我不知道如何做到这一点。如果我声明了一个fixedthreadpool,我将无法控制哪个线程执行什么操作,但在这种方法中,这是否类似于顺序处理,因为线程属于不同的池?
    如果有人能指导我如何执行此操作,这将对我有很大帮助。

共有1个答案

云承弼
2023-03-14

我不知道我是否明白你想做什么,但我会这样做:我创建了3个线程并以不同的方式命名它们,根据名称,我让它们运行3种不同的方法:第一种方法读取文件,并将结果放在所有trheads共享的arraylist和静态的arraylist中;第二种方法有一个无限循环(或一个任务,如果您想做一些优化,则每隔一定时间运行一次),它总是获取arraylist的第一个元素,处理它,并将其放在另一个arraylist中,这也是共享的和静态的;第三个线程也有一个循环(或任务),它总是获取第一个元素,并将其打印到文件中。

我会这么做,但也许我不明白,如果你需要写信给我

(谷歌翻译从:意大利语到:英语)

 类似资料:
  • 问题内容: 我有一个由5000个IP地址组成的arraylist。对于每个IP地址,我要执行SNMPGet请求和FTPDownload命令。我想以一种方式实现它,其中一次,前五个IP地址同时运行2个不同的线程。执行完这些IP地址后,将在这些线程上执行接下来的2个IP地址。有人可以帮忙吗? 在这里,连接是扩展线程的类,要实现的工作在其run()方法中编写。请帮忙。 问题答案: Executor框架将

  • 问题内容: 我有2个线程(线程1和线程2)。而且我有信号处理。每当发生线程2时,都应处理该信号。为此,我写了下面的程序 我编译并运行该程序。每1秒打印一次“ thread1 active”,每3秒打印一次“ thread2 active”。 现在我生成了。但是它会像上面那样显示“ thread1 active”和“ thread2 active”消息。再次生成了,现在每3秒仅打印一次“ threa

  • 我的问题陈述。读取包含1000万数据的csv文件,并将其存储在数据库中。用尽可能少的时间 我使用java的简单多线程执行器实现了它,其逻辑几乎与spring batch的chunk相似。从csv文件中读取预配置数量的数据,然后创建一个线程,并将数据传递给线程,该线程验证数据,然后写入多线程运行的文件。完成所有任务后,我将调用sql loader来加载每个文件。现在我想把这段代码移到spring b

  • 问题内容: 在面试中被问到这个问题,试图解决…但是没有成功。我想到了使用CyclicBarrier 有三个线程T1打印1,4,7 … T2打印2,5,8 …,T3打印3,6,9…。您如何同步这三个来打印序列1,2,3,4,5,6,7,8,9…。 我尝试编写并运行以下代码 输出 谁能帮助我纠正错误? 类似的 线程同步查询-同步三个线程以打印012012012012.....无法正常工作 问题答案:

  • 在采访中被问到这个问题,试图解决它。。。但并不成功。我想用自行车旅行车 有三个线程T1打印1,4,7... T2打印2,5,8......和T3打印3,6,9......你如何将这三个同步到打印序列1,2,3,4,5,6,7,8,9...... 我试着写作 输出 有人能帮我纠正错误吗? 类似的Ques线程同步-将三个线程同步到打印012。。。。。不起作用

  • 我正在尝试使用多个处理器类在处理器步骤中处理记录。这些类可以并行工作。目前我已经编写了一个多线程步骤,其中我 设置处理器类的输入和输出行 提交给遗嘱执行人服务 获取所有未来对象并收集最终输出