java多线程读写文件示例
发布时间:2021-08-11 11:03:28
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;
}
}
猜你喜欢
- 1.引入如下依赖<dependency> <groupId>org.spri
- 1. 前言我在Spring Security 实战干货:内置 Filter 全解析对Spring Security的内置过滤器进行了罗列,但
- java事件机制中包含下述三要素:1、事件,发生了什么事,比如用户在界面上的一个操作(手势滑动屏幕),当一个事件发生的时候,该事件用一个事件
- 本文主要介绍了idea中同一SpringBoot项目多端口启动,具体如下:现在已经有一个在跑着使用的默认端口 8080选中1,点击2.这个时
- Java实现按行读取大文件String file = "F:" + File.separator + "a.t
- 第1部分 TreeSet介绍TreeSet简介TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSe
- 使用命令行的方式管理服务器镜像及容器是运维人员最常用的方式,但是有的时候我们不得不远程操作docker或者是面向对docker并不熟悉的技术
- 通常C#使用基于XML的配置文件,不过如果有需要的话,比如要兼顾较老的系统,可能还是要用到INI文件。但C#本身并不具备读写INI文件的AP
- 这篇文章主要介绍了JDBC自定义连接池过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- SpringBoot集成Mybatis+xml格式的sql配置文件最近一直在研究SpringBoot技术,由于项目需要,必须使用Mybati
- 目录前言简单示例基础操作定时取消关联取消判断取消源码探究构造入手小插曲WaitHandle注册操作取消操作Cancel操作CancelAft
- 需求有时候我们想快速通过http访问本地的一些资源,但是安装一些web服务器又很费时和浪费资源,而且也不是长期使用的。这时候我们可以启动一个
- 需要修改Main方法第一行代码的路径为你的books.xml文件绝对路径或相对路径。代码演示了XPath各种语法的使用情况books.xml
- 首先写一个测试文件然后点击IDEA右侧的maven,然后选择package,之后点击上面运行或者直接双击即可,等下方控制台构建成功即可:然后
- 方法● maxBy:获取流中最大元素;minBy:获取流中最小元素● joining:合并,将流中的元素,以字符串的形式拼接起来● summ
- 最近做了一个项目,其中有一个在线网页交流的需求,好久没写代码了,手都生疏了,于是先写demo练练手,分享到脚本之家平台,以此做个记录,方便自
- 一.Worker Thread模式Worker的意思是工作的人,在Worker Thread模式中,工人线程Worker thread会逐个
- 在C程序代码中我们可以利用操作系统提供的互斥锁来实现同步块的互斥访问及线程的阻塞及唤醒等工作。然而在Java中除了提供LockAPI外还在语
- 本文以一个非常简单的实例讲述了Winform实现抓取web页面内容的方法,代码简洁易懂,非常实用!分享给大家供大家参考。具体实现代码如下:W
- 方法的返回值为什么要有带返回值的方法呢?调用处拿到方法的结果之后,才能根据结果进行下一步操作带返回值方法的定义和调用:如果在调用处,要根据方