`

java多线程写入同一文件

阅读更多

转自 :http://www.update8.com/Program/Java/19760.html
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.concurrent.ConcurrentLinkedQueue;

/**
 * 多线程下写文件
 * @author owen.huang
 *
 */

/**
 * 将要写入文件的数据存入队列中
 */
class Creater implements Runnable{
 private ConcurrentLinkedQueue<String> queue;
 private String contents;
 public Creater(){}
 public Creater(ConcurrentLinkedQueue<String> queue, String contents){
  this.queue = queue;
  this.contents = contents;
 }
 public void run() {
  try {
   Thread.sleep(100);
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  queue.add(contents);
 }
}

/**
 * 将队列中的数据写入到文件
 */
class DealFile implements Runnable{
 private FileOutputStream out;
 private ConcurrentLinkedQueue<String> queue;
 public DealFile(){}
 public DealFile(FileOutputStream out,ConcurrentLinkedQueue<String> queue){
  this.out = out;
  this.queue = queue;
 }
 public void run() {
  while(true){//循环监听
   if(!queue.isEmpty()){ 
    try {
     out.write(queue.poll().getBytes());
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
   try {
    Thread.sleep(100);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
}

/**
 * 测试类
 */

public class TestMultipleWriteFile {
 public static void main(String[] args) throws FileNotFoundException{
  FileOutputStream out = new FileOutputStream(new File("F:"+ File.separator +"test.txt"),true);
  ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<String>();
  
  for(int j=0;j<10;j++){
   new Thread(new Creater(queue,j+"--")).start();//多线程往队列中写入数据
  }
  new Thread(new DealFile(out,queue)).start();//监听线程,不断从queue中读数据写入到文件中
 }
}
分享到:
评论

相关推荐

    java两个线程同时写一个文件

    【Java两个线程同时写一个文件】在Java编程中,多线程环境下处理文件操作时,需要特别注意线程安全和资源同步。当两个线程尝试同时写入同一个文件时,可能会导致数据混乱或者文件损坏。Java提供了多种机制来解决这个...

    java多线程下载文件

    ### Java多线程断点下载文件:关键技术与实现 在当今高速互联网环境下,高效的数据传输技术变得至关重要。Java多线程断点续传文件下载技术就是一种能够显著提高下载速度和稳定性的方法。本文将深入解析Java多线程...

    多线程通信读写文件

    特别是在处理大量数据时,如读写文件,多线程可以同时执行不同的任务,从而显著提高整体性能。本项目着重探讨如何在多线程环境中实现安全有效的文件读写操作。 首先,我们需要理解多线程的基本概念。在单核处理器...

    java多线程简单下载器

    【Java多线程简单下载器】是一个初学者的编程作业,虽然代码可能较为混乱,但其核心功能已经实现,即通过多线程技术进行文件的下载。在Java中,多线程是并发处理的重要手段,它允许多个任务在同一时间执行,从而提高...

    Java实现文件的多线程下载

    在Java编程中,多线程是一项关键特性,它允许程序同时执行多个任务,极大地提高了效率。在本案例中,我们将探讨如何...在这个案例中,不仅学习了Java多线程编程,还涉及到网络I/O、文件操作以及并发控制等多个知识点。

    多线程导入excel 数据

    在Java编程中,多线程导入Excel数据是一项常见的任务,特别是在大数据处理和高并发场景下。...例如,文件`BigdataTest.java`可能是实现上述功能的一个测试类,通过它我们可以模拟并测试导入Excel数据的多线程场景。

    Java 多线程断点下载

    5. **同步下载进度**:使用`java.util.concurrent`包中的工具(如`CountDownLatch`, `CyclicBarrier`或`Semaphore`)确保所有线程安全地写入同一文件,防止数据冲突。 6. **合并文件**:所有块下载完成后,将这些小...

    JAVA多线程断电续传下载程序

    Java多线程断电续传下载程序是一种高效且实用的技术,尤其在处理大文件下载时,可以显著提高用户体验。这个程序的核心在于利用Java的多线程特性,将一个大文件分成多个部分,每个部分由一个独立的线程负责下载,同时...

    Java 多线程下载

    在Java编程中,多线程下载是一种常见的优化技术,它能有效地提高文件下载速度,特别是在处理大文件或网络带宽有限的情况下。...同时,这也是一个很好的实践案例,可以帮助你深入理解Java多线程编程和文件操作的知识。

    java多线程文件下载,将下载任务分片,每片一个线程下载

    - **同步控制**:为了避免多个线程同时写入同一文件,需要使用`synchronized`关键字或`java.util.concurrent.locks`包中的锁进行同步。 - **异常处理**:在多线程环境下,需要正确处理每个线程可能抛出的异常,防止...

    JAVA项目——多线程下载代码

    7. **同步机制**:为了防止多个线程同时写入同一文件块,可能使用`synchronized`关键字或者Lock接口(如ReentrantLock)来保证数据的一致性。 8. **异常处理**:在多线程环境中,正确处理异常至关重要,确保一个...

    深入浅出Java多线程.pdf

    ### 深入浅出Java多线程.pdf #### 知识点概览 本PDF文档涉及了Java多线程的全面介绍,分为基础篇、原理篇和JDK工具篇三个部分,旨在帮助读者深入了解Java多线程的概念、原理及实践应用。 #### 基础篇 **1. 进程...

    java多线程多点续传demo

    总的来说,`java多线程多点续传demo`是一个实现高效大文件下载的示例,利用Java的多线程机制和多点续传技术,提高了下载速度,同时也支持断点续传功能,使得在不稳定网络环境下也能顺利完成下载。通过分析`DownLoad....

    java多线程面试题

    以上知识点涵盖了多线程编程在Java中的基础理论和实际操作,包括线程的创建、运行、异常处理以及线程安全等问题,这些都是在进行Java多线程面试时常见的问题,对于理解和掌握Java多线程编程至关重要。

    java多线程实现文件下载功能

    总结来说,Java多线程文件下载的关键在于合理地划分任务,使用`RandomAccessFile`进行精确的文件写入,并确保线程间的安全协作。通过这种方式,我们可以实现高效、可靠的文件下载服务,特别是在处理大文件时,能显著...

    Java Socket 多线程实现文件传输

    Java Socket 多线程实现文件传输是一个常见的网络编程任务,主要涉及到Java的Socket编程、多线程技术以及文件I/O操作。在这个过程中,服务器端创建一个Socket监听特定端口,等待客户端连接请求。一旦连接建立,双方...

    支持断点续传java多线程下载.doc

    综上,这个Java多线程断点续传的实现涉及了Java多线程编程的核心概念,包括线程创建、同步、通信和状态管理,以及网络I/O和文件操作。同时,为了提供用户友好的界面,还涉及到UI更新和进度反馈的实现。

    java tcp多线程通信

    而多线程则是Java并发处理的核心,它可以允许多个任务在同一时间执行,提高程序的执行效率。 首先,我们需要了解TCP Socket的基本原理。在TCP通信中,服务器会监听特定端口,等待客户端的连接请求。当客户端发起...

    JAVA多线程端点续传下载MultiDown.

    Java多线程端点续传下载(MultiDown)是一种高效的文件下载技术,它结合了多线程和断点续传的概念,以优化网络资源利用,提高大文件下载速度和可靠性。在Java中实现这样的功能,我们需要理解以下几个核心知识点: 1...

    Java多线程-线程的安全问题与线程的同步机制介绍

    Java多线程-线程的安全问题与线程的同步机制介绍 在 Java 多线程编程中,线程安全问题是非常重要的一个话题。当多个线程访问同一个资源时,如果只有读操作那么不会出现线程安全问题,但是如果多个线程对资源进行读...

Global site tag (gtag.js) - Google Analytics