Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中线程在文件读写中的应用_Java_Multithreading - Fatal编程技术网

java中线程在文件读写中的应用

java中线程在文件读写中的应用,java,multithreading,Java,Multithreading,我想制作一个程序,逐行读取一个文件,然后将这些行写入另一个文件。我想用两个独立的线程来解决这个问题。第一个线程读取一行,然后将其传递给另一个线程,该线程负责通过消息将该行写入另一个文件。应重复此过程,直到到达文件末尾 我该怎么做呢?你想要的是一个。使用两个线程对象和一个。以下是一些启动代码: // we'll store lines of text here, a maximum of 100 at a time ArrayBlockingQueue<String> queue =

我想制作一个程序,逐行读取一个文件,然后将这些行写入另一个文件。我想用两个独立的线程来解决这个问题。第一个线程读取一行,然后将其传递给另一个线程,该线程负责通过消息将该行写入另一个文件。应重复此过程,直到到达文件末尾

我该怎么做呢?

你想要的是一个。使用两个
线程
对象和一个。以下是一些启动代码:

// we'll store lines of text here, a maximum of 100 at a time
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(100);

// code of thread 1 (producer)
public void run() {
   while(/* lines still exist in input file */) {
       String line = // read a line of text
       queue.put(line); // will block if 100 lines are already inserted
   }
   // insert a termination token in the queue
}

// code of thread 2 (consumer)
public void run() {
   while(true) {
       String line = queue.take(); // waits if there are no items in the queue
       if(/* line is termination token */) break;
       // write line to file
   }   
}
//我们将在此处存储文本行,一次最多存储100行
ArrayBlockingQueue=新的ArrayBlockingQueue(100);
//线程1的代码(生产者)
公开募捐{
而(/*行仍存在于输入文件中*/){
String line=//读取一行文本
queue.put(line);//如果已插入100行,则将被阻止
}
//在队列中插入终止令牌
}
//螺纹2的代码(耗电元件)
公开募捐{
while(true){
String line=queue.take();//如果队列中没有项目,则等待
如果(/*行为终止令牌*/)中断;
//将行写入文件
}   
}
希望这有帮助。我不能给出完整的代码,最好你自己去填补空白。

你想要的是一个完整的代码。使用两个
线程
对象和一个。以下是一些启动代码:

// we'll store lines of text here, a maximum of 100 at a time
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(100);

// code of thread 1 (producer)
public void run() {
   while(/* lines still exist in input file */) {
       String line = // read a line of text
       queue.put(line); // will block if 100 lines are already inserted
   }
   // insert a termination token in the queue
}

// code of thread 2 (consumer)
public void run() {
   while(true) {
       String line = queue.take(); // waits if there are no items in the queue
       if(/* line is termination token */) break;
       // write line to file
   }   
}
//我们将在此处存储文本行,一次最多存储100行
ArrayBlockingQueue=新的ArrayBlockingQueue(100);
//线程1的代码(生产者)
公开募捐{
而(/*行仍存在于输入文件中*/){
String line=//读取一行文本
queue.put(line);//如果已插入100行,则将被阻止
}
//在队列中插入终止令牌
}
//螺纹2的代码(耗电元件)
公开募捐{
while(true){
String line=queue.take();//如果队列中没有项目,则等待
如果(/*行为终止令牌*/)中断;
//将行写入文件
}   
}

希望这有帮助。我不能给出完整的代码,最好是你自己来填补空白。

还有,你做了什么?看起来像是你不想做的任务:请阅读和发布指南。所以,这不是一个你可以期望人们为你做所有工作的地方。我认为这是一个有用的问题。是的,它本来可以用更好的措辞,但都铎在解释真正被问到的问题方面做得非常出色,并提供了一个具有良好信息的总体答案,但没有为询问者做所有的工作。而且,你尝试了什么?看起来像是一个你并不真正想做的任务:请阅读和发布指南。所以,这不是一个你可以期望人们为你做所有工作的地方。我认为这是一个有用的问题。是的,它本来可以用更好的措辞,但都铎在解释真正被问到的问题方面做得非常出色,并提供了一个具有良好信息的总体答案,但没有为询问者做所有的工作。除了ArrayBlockingQueue,还有其他选择吗,因为我事先不知道队列的容量。100不是容量,它只是你一次在生产者和消费者之间传输多少行。它可以是您选择的任何值,并且不取决于文件中的总行数。除了ArrayBlockingQueue,还有其他选择吗,因为我事先不知道队列的容量。100不是容量,而是您在生产者和消费者之间一次传输的行数。它可以是您选择的任何值,并且不取决于文件中的总行数。