使用线程将BlockingQueue中的字符串写入文本文件

时间:2014-10-24 01:59:56

标签: java multithreading file-io queue blockingqueue

我正在做下周要完成的家庭作业。我们应该有三个线程。第一个文本从文本文件中读取文本,下一个文本反转每个其他单词,并且在反转中不包括标点符号,最后一个线程从队列中获取反转的单词并将它们写回新的文本文件。

BlockingQueues只能是长度2.我已成功读取文件并反转了这些单词。但是我在写入文本文件时遇到问题。到目前为止,它只写了第一个字。 这是最终输出线程的run方法中的代码。我不知道如何让线程写入当前队列中的两个单词,然后停止并等待队列填充来自其他线程的新反转单词

  public void run() {
    while(true){
       try {
           FileWriter writer = new FileWriter(file);
           try {

               writer.write(out.take() + " ");
           } catch (InterruptedException ex) {
               Logger.getLogger(outputClass.class.getName()).log(Level.SEVERE, null, ex);
           }
           writer.close();
       } catch (IOException ex) {
           Logger.getLogger(outputClass.class.getName()).log(Level.SEVERE, null, ex);
       }   
}

}

1 个答案:

答案 0 :(得分:0)

在尝试写入数据之前,您需要检查队列中是否存在数据。如果没有,你可以使用Thread.sleep()来屈服于其他线程,然后在线程唤醒时再次尝试,或者你可以创建一个等待条件,让其他线程在写入数据时通知等待。