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 ...
随机推荐
- 守护态运行Docker容器
更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行.此时,可以通过添加 -d 参数来实现. 例如下面的命令会在后台运行容器. $ sudo docker run -d ...
- Spring Boot+maven打war包
存在一个坑: 官网文档 指出以下前3步做法,但是这样只可以打出可运行的jar包,要打出war包还要在文档后面的链接跳到另一个页面,才能找到第四步的做法,也就是最终能够打出war包,可能有些朋友有些粗心 ...
- 这交互炸了(四) :一分钟让你拥有微信拖拽透明返回PhotoView
本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发 <交互炸了>或许是一系列高端特效教程, 文中会介绍一些比较炫酷的特效,以及实现的思路.特效实现本身也许不会有太大的难度 ...
- 工作流引擎 Flowable 6.0.0.RC1 release,完全兼容Activi
Flowable 6.0.0.RC1 release,第一个可流动的6引擎版本(6.0.0.RC1). Flowable 6.0.0.RC1 relase新增加的功能以及特色: 包重命名为org.Fl ...
- mysql 跨服务器复制数据库
比较了下,还是采用ssh的方式最简单.比如传数据库test_db mysqldump --databases test_db| ssh 121.121.121.121 test_db
- 手动创建第一个OC程序
手动创建第一个OC程序 创建一个文件夹,文件夹内创建一个a.m的OC源文件,并编辑 之前说过,OC是完全兼容C语言的,那么我们先写个下面的程序尝试一下 #include<stdio.h> ...
- Matplotlib Toolkits:python高级绘图库seaborn
http://blog.csdn.net/pipisorry/article/details/49515745 Seaborn介绍 seaborn (Not distributed with matp ...
- Matlab 2015b 启动时崩溃 MATLAB crashes during startup on Ubuntu 16.04
Matlab 启动时崩溃 MATLAB crashes during startup on Ubuntu Matlab 2015B Ubuntu 16.04 之前解决过,更新后问题又来了. 出 ...
- 使用Intent传递对象
Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动.发送广播.启动服务等.在进行上述操作的时候,我们还可以在Intent 中添加一些附加数据,以达到传值的效果,比如在FirstActi ...
- Swift中实现ruby中字符串乘法倍增的功能
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在ruby中对于字符串类型我们可以用乘法生成一个指定数 ...