IT虾米网

Java异步存储数据线程详解

xmjava 2021年10月13日 编程语言 142 0
本文章主要介绍了Java异步存储数据线程,具有不错的的参考价值,希望对您有所帮助,如解说有误或未考虑完全的地方,请您留言指出,谢谢!
package com.panda.core.db.asyncdb; 
 
import com.panda.core.db.impl.MongoDBService; 
import com.panda.core.db.model.IEntity; 
import org.mongodb.morphia.dao.DAO; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
 
/** 
 * 异步存储数据 
 * Created by Lovell on 9/26/16. 
 */ 
 
public class DBThread implements Runnable { 
    private static Logger logger = LoggerFactory.getLogger(DBThread.class); 
 
    private DBQueue queue; 
 
    public DBThread(DBQueue queue) { 
        this.queue = queue; 
    } 
    @SuppressWarnings("uncheck") 
    @Override 
    public void run() { 
        while(true) { 
            try { 
                int queueSize = queue.size(); 
                if (queueSize == 0) { 
                    waitThead(); 
                } else { 
                    IEntity entity = queue.pop(); 
                    if (entity == null) continue; 
 
                    DAO dao = MongoDBService.getInstance().getDao(entity.getClass()); 
                    dao.save(entity); 
                    if(queueSize>1000){ 
                        logger.warn("db queue size is then 1000,queueSize={}",queueSize); 
                    } 
                } 
            } catch (Exception e) { 
                logger.error(e.getMessage(), e); 
            } 
        } 
    } 
    /** 
     * 等待线程 
     */ 
    private void waitThead() { 
        try { 
            Thread.sleep(1000); 
        } catch (InterruptedException e) { 
            e.printStackTrace(); 
            logger.error(e.getMessage(), e); 
        } 
    } 
}

发布评论
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

java .class详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。