MinerStoreThread.java 存储线程
package com.iteye.injavawetrust.miner; import java.util.HashMap;
import java.util.Map; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; /**
* 存储线程
* @author InJavaWeTrust
*
*/
public class MinerStoreThread extends Thread { private static final Log LOG = LogFactory.getLog(MinerStoreThread.class); private MinerDB mdb = MinerDB.getInstance(); private MinerConfig config = null; public MinerStoreThread(MinerConfig config) {
this.config = config;
} public void run() {
while(!MinerMonitorThread.done){
store();
}
} public synchronized void store(){
switch(config.getStoreType().getType()) {
case MinerConstanits.DB : dbStore(); break;
case MinerConstanits.FILE : fileStore(); break;
default : return;
}
}
/**
* 数据库存储
*/
public synchronized void dbStore() {
Html html = MinerQueue.storePoll();
if(null == html || MinerUtil.isBlank(html.getHtml())){
return;
} Map<String, String> map = new HashMap<String, String>();
map.put("html", html.getHtml());
String title = MinerUtil.fileName(html.getUrl());
if(title == null || title.length() > 255){
return;
}
map.put("title", title);
MinerUtil.getHtmlToLocal(map); MinerBean bean = new MinerBean();
bean.setId(mdb.getUUID());
bean.setBatchNo(MinerUtil.getToday());
String path = (MinerConstanits.HTMLPATH + MinerUtil.getToday()).replaceAll("\\\\", "\\\\\\\\");
bean.setFilePath(path);
bean.setFileName(title);
String insertSql = mdb.getInsertSql(bean);
mdb.insert(insertSql); LOG.info("MinerStoreThread 当前线程[" + Thread.currentThread().getName() + "]");
}
/**
* 文件存储
*/
public synchronized void fileStore() {
Html html = MinerQueue.storePoll();
if(null == html || MinerUtil.isBlank(html.getHtml())){
return;
}
Map<String, String> map = new HashMap<String, String>();
map.put("html", html.getHtml());
String title = MinerUtil.fileName(html.getUrl());
if(title == null || title.length() > 255){
return;
}
map.put("title", title);
MinerUtil.getHtmlToLocal(map);
LOG.info("MinerStoreThread 当前线程[" + Thread.currentThread().getName() + "]");
} }
MinerStoreThread.java 存储线程的更多相关文章
- Java的线程安全
线程安全 我们这里讨论的线程安全,就限定于多个线程之间存在共享数据访问这个前提,因为如果一段代码根本不会与其他线程共享数据,那么从线程安全的角度来看,程序是串行执行还是多线程执行对它来说是完全没有区别 ...
- 深入理解Java之线程池
原作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本文归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...
- 多线程(五) java的线程锁
在多线程中,每个线程的执行顺序,是无法预测不可控制的,那么在对数据进行读写的时候便存在由于读写顺序多乱而造成数据混乱错误的可能性.那么如何控制,每个线程对于数据的读写顺序呢?这里就涉及到线程锁. 什么 ...
- Java面向对象 线程技术--上篇
Java面向对象 线程 知识概要: (1)线程与进程 (2)自定义线程的语法结构 (3)多线程概念理解 (4)多线程状态图 (5)多线程--卖票 (6)同 ...
- Java进程&线程(整理)
Java进程&线程 程序:程序员写的代码,就是代码,不运行好像不会发生什么: 进程:一个进程可以理解为"运行的"一个程序,当我们启动一个java程序后,对应的jvm就会创建 ...
- Java进程&线程(一)
Java进程&线程 程序:程序员写的代码,就是代码,不运行好像不会发生什么: 进程:一个进程可以理解为"运行的"一个程序,当我们启动一个java程序后,对应的jvm就会创建 ...
- 深入理解Java之线程池(爱奇艺面试)
爱奇艺的面试官问 (1) 线程池是如何关闭的 (2) 如何确定线程池的数量 一.线程池销毁,停止线程池 ThreadPoolExecutor提供了两个方法,用于线程池的关闭,分别是shutdown() ...
- [转]深入理解Java之线程池
原文链接 原文出处: 海 子 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这 ...
- java中线程和并发面试题
http://www.cnblogs.com/dolphin0520/p/3932934.html http://www.cnblogs.com/dolphin0520/p/3958019.html ...
随机推荐
- 阿里云linux下web服务器配置
markdown截图不方便,本教程不用markdown编写 首先参考文章 https://www.jianshu.com/p/2604e53a7f6a?from=singlemessage 安装完后无 ...
- 记一次MySQL删库的数据恢复
昨天因为不可描述的原因,数据库直接被 drop database删除.在第一时间停止数据库服务和Web服务,备份MySQL数据目录下的所有文件之后,开始走上数据恢复之路. 第一次干这种事,各种不得法. ...
- OpenResty 执行阶段的概念和用途
主要还是 Nginx 的执行阶段知识了,都是因为 OR 才会那么深刻, 它有些自己的阶段. 主要还是参照 春哥的 Nginx 教程 请多读几遍,如果不清楚nginx的执行阶段就无法充分利用 openr ...
- iOS开源加密相册Agony的实现(五)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...
- Objective-C的继承与组合
Objective-C的继承与组合 Objective-C与Java继承上的区别 区别 Objective-C Java 成员变量 Objective-C继承不允许子类和父类拥有相同名称的成员变量 J ...
- 给现有的word和pdf加水印
iTextSharp简单生成pdf和操作pdf添加水印 给word加水印,利用的是aspose.words
- How to code like a hacker
We are coding. Are we engineers? Are we programmers? Are we coder? No, I want to be a hacker! Many g ...
- Leetcode解题-链表(2.2.3)PartitionList
题目:2.2.3 Partition List Given a linked list and a value x, partition it such that all nodes less tha ...
- SpriteKit游戏Delve随机生成地牢地图一个Bug的修复
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Delve是一个很有意思的地牢探险类型的游戏,其中每一关的地图 ...
- FFmpeg源代码简单分析:avcodec_close()
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...