1. 程式人生 > >用一個執行緒控制一個事務執行

用一個執行緒控制一個事務執行

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