java多线程读写文件示例

 更新时间:2014年04月11日 09:56:48   作者:  
这篇文章主要介绍了java多线程读写文件示例,需要的朋友可以参考下

复制代码 代码如下:

package com.ysh.file;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import com.google.common.collect.Lists;

public class WriteQueue {
 private static final int MAX_QUEUE_SIZE = 10000;
 private LinkedList<String> queueCache = Lists.newLinkedList();
 private Lock lock = new ReentrantLock();
 private Condition full = lock.newCondition();
 private Condition empty = lock.newCondition();

 private WriteQueue() {
 }

 private static class WriteQueueHolder {
  private final static WriteQueue INSTANCE = new WriteQueue();
 }

 public static WriteQueue getInstance() {
  return WriteQueueHolder.INSTANCE;
 }

 public void add(String line) {
  lock.lock();
  try {
   while (queueCache.size() >= MAX_QUEUE_SIZE) {
    full.await();
   }
   queueCache.addFirst(line);
   empty.signal();
  } catch (InterruptedException e) {
   e.printStackTrace();
  } finally {
   lock.unlock();
  }
 }

 public void add(List<String> lineList) {
  lock.lock();
  try {
   while (queueCache.size() >= MAX_QUEUE_SIZE) {
    full.await();
   }
   queueCache.addAll(lineList);
   empty.signal();
  } catch (InterruptedException e) {
   e.printStackTrace();
  } finally {
   lock.unlock();
  }
 }

 public ArrayList<String> flush() {
  ArrayList<String> temp = null;
  lock.lock();
  try {
   while (queueCache.size() == 0) {
    empty.await();
   }
   temp = Lists.newArrayList();
   temp.addAll(queueCache);
   queueCache.clear();
   full.signal();
  } catch (InterruptedException e) {
   e.printStackTrace();
  } finally {
   lock.unlock();
  }
  return temp;
 }

}

相关文章

  • Java Web监听器Listener接口原理及用法实例

    Java Web监听器Listener接口原理及用法实例

    这篇文章主要介绍了Java Web监听器Listener接口原理及用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Java在高并发场景下实现点赞计数器

    Java在高并发场景下实现点赞计数器

    点赞计数器的本质就是对某个变量在高并发情况下的修改,这篇文章主要为大家介绍了Java实现点赞计数器的示例代码,感兴趣的小伙伴可以了解一下
    2023-06-06
  • 如何使用@Value和@PropertySource注入外部资源

    如何使用@Value和@PropertySource注入外部资源

    这篇文章主要介绍了如何使用@Value和@PropertySource注入外部资源的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Spring boot easyexcel 实现复合数据导出、按模块导出功能

    Spring boot easyexcel 实现复合数据导出、按模块导出功能

    这篇文章主要介绍了Spring boot easyexcel 实现复合数据导出、按模块导出,实现思路流程是准备一个导出基础填充模板,默认填充key,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Java面试题冲刺第十九天--数据库(4)

    Java面试题冲刺第十九天--数据库(4)

    这篇文章主要为大家分享了最有价值的三道关于数据库的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Springboot前后端分离项目配置跨域实现过程解析

    Springboot前后端分离项目配置跨域实现过程解析

    这篇文章主要介绍了Springboot前后端分离项目配置跨域实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java基础之简单介绍一下Maven

    Java基础之简单介绍一下Maven

    今天给大家复习一下Java基础知识,简单介绍Maven,文中有非常详细的解释,对Java初学者很有帮助哟,需要的朋友可以参考下
    2021-05-05
  • java封装的概念和实现方法示例

    java封装的概念和实现方法示例

    这篇文章主要介绍了java封装的概念和实现方法,结合实例形式详细分析了java封装的概念、原理及相关使用技巧,需要的朋友可以参考下
    2019-11-11
  • JAVAEE中用Session简单实现购物车功能示例代码

    JAVAEE中用Session简单实现购物车功能示例代码

    本篇文章主要介绍了JAVAEE中用Session简单实现购物车功能示例代码,非常具有实用价值,需要的朋友可以参考下。
    2017-03-03
  • 如何基于JAVA读取yml配置文件指定key内容

    如何基于JAVA读取yml配置文件指定key内容

    这篇文章主要介绍了如何基于JAVA读取yml配置文件指定key内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01

最新评论