java 批量存储_[Java]批量存储信息

批量存储信息

import java.util.Collections;

import java.util.LinkedList;

import java.util.List;

import java.util.Properties;

import java.util.concurrent.locks.ReentrantLock;

import org.apache.log4j.Logger;

public class MonitorStoreService5 extends Thread{

static final Logger logger = Logger.getLogger(MonitorStoreService5.class);

boolean isRun = true;

List queue = (List)

Collections.synchronizedList(new LinkedList());

ReentrantLock lock = new ReentrantLock();

Object obj = new Object();

static int storeOvertime = 1000*3;

static int cacheMaxSize = 1000;

@Override

public void run() {

IMonitorService dao = new IMonitorService();

while(isRun){

synchronized(obj){

logger.debug("run() wait");

try{ obj.wait(storeOvertime); }catch(Exception ex){}

}

lock.lock();

try{

logger.debug("run() queue.save.");

if(!queue.isEmpty() && dao.saveMonitor(queue)){ queue.clear(); }

logger.debug("run() queue.clear.");

if(queue.size()>=cacheMaxSize){ queue.clear(); }

}finally{

lock.unlock();

}

}

}

public boolean append(Properties data){

if(!isRun) return false;

if(queue.size()>=cacheMaxSize){

logger.debug("append() queue.size>=cacheMaxSize");

synchronized(obj){

obj.notifyAll();

}

logger.debug("append() wait");

synchronized(obj){

try{ obj.wait(100); }catch(Exception ex){}

}

}

while(lock.isLocked()){

logger.debug("append() lock.isLocked wait");

synchronized(obj){

try{ obj.wait(100); }catch(Exception ex){}

}

}

//try{ Thread.sleep(1); }catch(Exception ex){}

//logger.debug("append() queue.add");

return queue.add(data);

}

public void shutdown(){

isRun = false;

}

}

static void t6(){

int ac = 12333;

MonitorStoreService5 ser = new MonitorStoreService5();

ser.start();

T6Thread t1 = new T6Thread();

T6Thread t2 = new T6Thread();

T6Thread t3 = new T6Thread();

t1.ser = ser;

t1.ac = ac;

t2.ser = ser;

t2.ac = ac;

t3.ser = ser;

t3.ac = ac;

t1.start();

t2.start();

t3.start();

try {

Thread.sleep(10000);

} catch (InterruptedException e) {

e.printStackTrace();

}

ser.shutdown();

}

static class T6Thread extends Thread{

MonitorStoreService5 ser = null;

int ac = 11333;

public void run(){

//MonitorStoreService5 ser = new MonitorStoreService5();

//ser.start();

for(int i=0; i

ser.append(new Properties());

}

}

}

import java.util.LinkedList;

import java.util.List;

import java.util.Properties;

import org.apache.log4j.Logger;

public class MonitorStoreService4 extends Thread{

static final Logger logger = Logger.getLogger(MonitorStoreService4.class);

LinkedList> storeQueue = new LinkedList>();

List current  = new LinkedList();

boolean isRun = true;

Object lock = new Object();

static int waitOvertime = 1000 * 30;

static int currntMaxSize = 500;

public void run(){

MonitorDao dao = new MonitorDao();

while(isRun){

synchronized(lock){

logger.debug("run() wait");

try{ lock.wait(waitOvertime); }catch(Exception ex){}

}

while(!storeQueue.isEmpty()){

List item = storeQueue.removeFirst();

logger.debug("run() storeQueue.save.");

if(!dao.save(item)){

storeQueue.addLast(item);

}

}

}

if(!storeQueue.isEmpty()){

List item = storeQueue.removeFirst();

logger.debug("run() storeQueue.save.");

if(!dao.save(item)){

}

}

if(!current.isEmpty()){

List item = current;

logger.debug("run() current.save.");

if(!dao.save(item)){

}

}

logger.debug("run() shutdown.");

}

//synchronized

public boolean append(Properties data){

if(!isRun) return false;

if(current.size()>=currntMaxSize){

logger.debug("append() storeQueue.addLast");

storeQueue.addLast(current);

current = new LinkedList();

synchronized(lock){

lock.notifyAll();

}

}

//try{ Thread.sleep(1); }catch(Exception ex){}

logger.debug("append() current.add");

return current.add(data);

}

public void shutdown(){

isRun = false;

}

}

fdkljfdljf

import java.util.List;

import java.util.Properties;

import org.apache.log4j.Logger;

public class MonitorDao {

static final Logger logger = Logger.getLogger(MonitorDao.class);

public boolean save(List ls){

logger.debug("save size:"+ls.size());

for(Properties i:ls){

}

try {

Thread.sleep(200);

} catch (InterruptedException e) {

e.printStackTrace();

}

return true;

}

}

测试

static void t5(){

MonitorStoreService4 ser = new MonitorStoreService4();

ser.start();

for(int i=0; i<100333; i++){

ser.append(new Properties());

}

try {

Thread.sleep(10000);

} catch (InterruptedException e) {

e.printStackTrace();

}

ser.shutdown();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值