由于并发,需要做多进程多线程。
拉取数据及媒体文件进程、上传文件进程(cos或local)、删除老旧资源数据进程。
waiting。。。
class MyThread extends Thread { // 继承Thread类,作为线程的实现类
private String name; // 表示线程的名称
private String uploadthread;
Mysql mysqlObj;
public MyThread(String name,String uploadthread) {
this.name = name; // 通过构造方法配置name属性
this.uploadthread=uploadthread;
}
public String getPullThreadName()
{
return this.name;
}
public String getUploadthreadName()
{
return this.uploadthread;
}
public void run() { // 覆写run()方法,作为线程 的操作主体
System.out.println("name:"+name+" child thread ID:"+Thread.currentThread().getId());
FinanceTestDemo finance = new FinanceTestDemo();
// synchronized (finance) {
try {
this.mysqlObj = new Mysql();
Thread.sleep(100);
mysqlObj.update("update ld_wechatsession_thread_status set status = 'yes',created_at = NOW() where threadtype = 'pull' AND thread = "+name);
// TimeUnit.SECONDS.sleep(1);
finance.GetConfData(this,mysqlObj);
} catch (InterruptedException | SQLException e) {
System.out.println("error:"+e.getMessage());
}finally {
mysqlObj.update("update ld_wechatsession_thread_status set status = 'no' where threadtype = 'pull' AND thread = "+name);
System.out.print("exec finished!\n");
mysqlObj.close(null);
}
// }
}
}
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();//单进程
// ScheduledExecutorService service = Executors.newScheduledThreadPool(4);//进程池 线程数=CPU核心数 * (1+平均等待时间/平均工作时间)
// 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间
// 10:秒 5:秒
// 参数一:第一次执行的时间,参数二:每隔多少秒执行一次
service.scheduleAtFixedRate(new Runnable() {
//创建 run 方法
@Override
public void run() {
//System.out.println("start main run ");
System.out.println("main Thread ID: " + Thread.currentThread().getId());//Thread.currentThread().getName()
String sql= "SELECT s.*,c.thread,c.uploadthread FROM ld_wechatsession_thread_status s INNER JOIN ld_wechatsession_conf c ON c.thread = s.thread INNER JOIN wx_corp ON wx_corp.corpindex = c.corpindex WHERE wx_corp.status = 'auth' AND c.is_enable = 'yes' AND s.status = 'no' AND s.threadtype = 'pull' GROUP BY c.thread";
Mysql Mysql = new Mysql();
ResultSet rs = Mysql.query(sql);
List<MyThread> myThreadList=new ArrayList<>();
while(true){
try {
assert rs != null;
if (!rs.next()) break;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
// 通过字段检索
try {
String name = rs.getString("thread");
String uploadthread=rs.getString("uploadthread");
//new MyThread(name,uploadthread).start();
myThreadList.add(new MyThread(name,uploadthread));
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
Mysql.close(rs);
for (int i=0;i<myThreadList.size();i++)
{
myThreadList.get(i).start();
}
}
}, 1, 300, TimeUnit.SECONDS);