用一個執行緒控制一個事務執行
1.專案啟動會執行該執行緒,然後這個執行緒控制執行一個事務
1.專案用的struts2+spring 再web.xml新增監聽
<listener>
<listener-class>cn.cntomorrow.jzsh.timerThead.Handle</listener-class>
</listener>
2.
package cn.cntomorrow.jzsh.timerThead;
import java.text.ParseException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/****
* 專案自啟動程式入口
* @author yweiwei
*/
public class Handle implements ServletContextListener,
HttpSessionListener, ServletRequestListener{
public void contextDestroyed(ServletContextEvent arg0) {
}
/***
* 建立監聽程式:專案啟動即自啟動此程式
*/
public void contextInitialized(ServletContextEvent arg0) {
for(int i=0;i<5;i++){
System.out.println("==============執行緒開始啟動==================");
}
TheadContrl t=new TheadContrl();
try {
//呼叫執行的方法
t.createsite();
} catch (ParseException e) {
e.printStackTrace();
}
}
public void sessionCreated(HttpSessionEvent arg0) {
}
public void sessionDestroyed(HttpSessionEvent arg0) {
}
public void requestDestroyed(ServletRequestEvent arg0) {
}
public void requestInitialized(ServletRequestEvent arg0) {
}
}
3.
package cn.cntomorrow.jzsh.timerThead;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import mt.framework.util.Logger;
import org.apache.commons.collections.map.ListOrderedMap;
import cn.cntomorrow.jzsh.ws.action.JzshAction;
/***
* 執行緒管理類
* @author yweiwei
*/
public class TheadContrl {
private TaskDo taskdo = new TaskDo();
//建立一個執行緒池
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
public void createsite() throws ParseException{
// 一天的毫秒數
long daySpan = 24 * 60 * 60 * 1000;
// 規定的每天時間15:33:30執行
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '11:00:00'");
// 首次執行時間
Date startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf.format(new Date()));
// 如果今天的已經過了 首次執行時間就改為明天
if(System.currentTimeMillis() > startTime.getTime())
startTime = new Date(startTime.getTime() + daySpan);
Timer t = new Timer();
TimerTask task = new TimerTask(){
@Override
public void run() {
// 要執行的程式碼
String sitecode="1";
String s="2";
Logger.info("執行緒:執行一次jzsh增量開始");
try {
/***
* 先推送刪除基站資訊
*/
List<ListOrderedMap> rlist = taskdo.selectdeleteBaseInfo(s);//查詢刪除的基站 引數2作為查詢刪除基站的條件
for (int i=0;i<rlist.size();i++) {
//得到刪除的基站id
String n=(String) rlist.get(i).get("BASESTATION_ID");
JzshAction jzsh=new JzshAction();
jzsh.createsite(n,n);//查詢刪除基站
}
//查詢增加的基站
rlist = taskdo.selectBaseInfo(sitecode);
for (int i=0;i<rlist.size();i++) {
String m=(String) rlist.get(i).get("BASESTATION_ID");
JzshAction jzsh=new JzshAction();
jzsh.createsite(m);
}
System.gc();
Thread.sleep(2000);
}catch (InterruptedException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
Logger.info("執行緒:執行一次jzsh增量結束");
}
};
// 以每24小時執行一次
t.scheduleAtFixedRate(task, startTime, daySpan);
}
}
相關推薦
用一個執行緒控制一個事務執行
1.專案啟動會執行該執行緒,然後這個執行緒控制執行一個事務 1.專案用的struts2+spring 再web.xml新增監聽 <listener><listener-class>cn.cntomorrow.jzsh.timerThe
RT-Thread 讀後感2——建立執行緒(定義執行緒的棧,定義執行緒函式,定義執行緒控制塊,執行緒初始化函式)
1. 定義執行緒的棧 多執行緒作業系統中,每個執行緒都是獨立的,互不干擾,所以要為每個執行緒分配獨立的棧空間,這個棧空間通常是一個預先定義好的全域性陣列, 也可以是動態分配的一段記憶體空間,但它們都存在於 RAM 中。定義兩個執行緒棧如下: // 定義執行緒棧 大小設定為512 rt_ui
多執行緒-執行緒控制之休眠執行緒
package cn.itcast_04; import java.util.Date; public class ThreadSleep extends Thread { @Override
Android常用控制元件,用執行緒寫一個進度條。
一、事件監聽(三種寫法) 1、標籤上直接繫結監聽方法 public void xxx(View view) 2、 建立監聽器物件,元件再繫結監聽器物件 2.1、匿名內部類 2.2、使用匿名內部類並定義成全域性的屬性 二、文字框(TextView) 1、T
一個執行緒控制另一個執行緒的暫停或啟動
MainTest類中可以控制執行緒的暫停或繼續執行。 public class MainTest { /** * 這個執行緒操作另一個執行緒的暫停或開始 * @param args */ public static void main(String[] args) {
(轉)PHP執行緒安全與非執行緒安全的區別:如何選擇用哪一個?
PHP執行緒安全與非執行緒安全的區別:如何選擇用哪一個? 很多時候,我們在做PHP環境配置的時候,很多人都是直接去亂下載PHP版本的,但是他不清楚:從2000年10月20日釋出的第一個Windows版的PHP3.0.17開始的都是執行緒安全的版本,直至5.2.1版本開始有Thread Safe
用java多執行緒實現一個簡單的水池進出水問題
需求: 有一個水池100L,有出水口和入水口,出水口和入水口不能同時開啟,入水口每次注入5L水,出水口每次出4L水,如果池子注滿水,或者池子中沒有水就停止。 使用繼承Thread類的方式編寫出水口,使用實現Runnable方式編寫入水口,執行結果。 package po
一個簡單的執行緒控制的定時器
package com.gary.dida; import java.util.Scanner; public class Test { public static void main(String[] args) { TimeMeterDemo timeMeter1 =
c#中子執行緒控制進度條的一個簡單例子
{ public Form1() ... { InitializeComponent(); } private void button1_Click( object sender, EventArgs e
程序與執行緒的一個簡單解釋 --- 轉載
程序與執行緒的一個簡單解釋 --- 轉載自 阮一峰的部落格 程序(process)和執行緒(thread)是作業系統的基本概念,但是它們比較抽象,不容易掌握。 最近,我讀到一篇材料,發現有一個很好的
編寫一個程式,啟動三個執行緒,三個執行緒的名稱分別是 A,B,C; 每個執行緒將自己的名稱在螢幕上列印5遍,列印順序是ABCABC...
設定標誌位flag 當flag==1時,列印A 當flag==2時,列印B 當flag==3時,列印C 用count控制列印的次數,題目要求列印5遍,即15個字元 這裡的用notifyAll()的原因:是要把其餘兩個全都喚醒,因為如果用notify
寫兩個執行緒,一個執行緒列印 1~52,另一個執行緒列印A~Z, 列印順序是12A34B...5152Z
這個題目就是要用wait()和notify()方法來控制兩個執行緒的執行 看如下程式碼: 當標誌位flag為1 時,列印數字;否則列印字母 count即為列印的數字 class Print { private int flag = 1;
三個執行緒每個執行緒輸出一個字元
#include<stdio.h> #include<unistd.h> #include<pthread.h> #define NUM 3 int n=0; pthread_mutex_t t_mutex; pthread_cond_t t_cond; void
java實現多個執行緒達到一個闕伐值後一起執行
給大家推薦個靠譜的公眾號程式設計師探索之路,大家一起加油 1. CountDownLatch 1.1 簡介 CountDownLatch是一個同步輔助類,通過它可以完成類似於阻塞當前執行緒的功能,即:一個執行緒或多個執行緒一直等待,直到其他執行緒執行的操作完成。CountDownLatch用
Java多執行緒開發——一個簡單的數字加減小例子
範例: 兩個執行緒實現加法,兩個執行緒實現減法 class Resource { private int num = 0; private boolean flag = true; //flag = true 表示可以進行加法操作,不能進行減法操作 //flag = fa
寫兩個執行緒,一個執行緒列印 1~ 52,另一個執行緒列印A~Z, 列印順序是12A34B...5152Z;
寫兩個執行緒,一個執行緒列印 1~ 52,另一個執行緒列印A~Z, 列印順序是12A34B…5152Z; 第一種方式: class Print{ private int flag = 1; private int count = 1; public synch
多執行緒下載一個檔案
瞭解了這麼多與執行緒相關的知識,那麼我們也要實戰一下了(在學習本篇知識之前,如果對java中的網路基礎連結不太熟悉的,建議先去學一下java網路程式設計,再來看本文章。) 因為本篇是多執行緒下載的demo,所以就直接附上程式碼,裡面都寫好了註釋,不影響對本篇的學習。
Java--如何使用多執行緒對一個HashSet進行平行計算
這段時間工作比較忙。今天抽空整理了一個多執行緒使用場景。 當處理一個數據量比較大的集合時(每個元素的計算都耗時比較長)。由於只使用一個執行緒進行計算比較慢。所以想到多跑幾個執行緒進行處理。 1.每個執行緒可以自行計算要處理集合的開始和結束索引,確保每一個元素都被計算的到。
一個執行緒OOM後其餘執行緒是否停止
OOM:Out Of Memory。 在多執行緒環境下,每個執行緒擁有一個棧和一個程式計數器。棧和程式計數器用來儲存執行緒的執行歷史和執行緒的執行狀態,是執行緒私有的資源,也就是說,堆是執行緒共享。其他的資源(比如堆、地址空間、全域性變數)是由同一個程序內的多
多執行緒複製一個檔案
package teacher; /** * 描述:多執行緒複製檔案 * * @author ASUS * @date 2018年9月22日 */ import java.io.File; import java.io.FileNotFoundException