1,线程如下:import java.sql.Connection;
import java.sql.PreparedStatement;
import org.apache.log4j.*;
import com.customs.util.Log4jExceptionUtil;
import java.sql.SQLException;
import com.customs.util.DBHelper;
/**
* function: 本线程功能:根据formNo把已经完成的job复制到finished_process_job表中去
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
*/
class CopyFinishedJobThread extends Thread {
private Logger log = Logger.getLogger(this.getClass().getName());
String formNo = "";
boolean flag = false;
Connection threadConn = null;
public CopyFinishedJobThread() {
} /**
* 唤醒线程
* @param flag boolean
* @param formNo String:表单编号
*/
synchronized void wakeUp(boolean flag, String formNo) {
this.flag = flag;
this.formNo = formNo;
notify();
} /**
* function:根据formNo把已经完成的job复制到finished_process_job表中去,
* 并删除job中拥有当前formNo的记录
* @param pConn Connection
* @param formNo String
* @throws SQLException
*/
public void copyFinishedJob(Connection pConn,String formNo) throws SQLException{
PreparedStatement ps = null;
String sql = "";
try {
sql = " insert into [finished_process_job] "
+ " select * from job where form_no = ? ";
ps = pConn.prepareStatement(sql);
int i = 1;
ps.setString(i++, formNo);
ps.executeUpdate(); deleteByFormNo(pConn,formNo);//根据formNo删除job
}
catch (SQLException ex) {
Log4jExceptionUtil.logStackTrace(ex, log);
throw new SQLException();
}
finally {
if (ps != null) {
try {
ps.close();
}
catch (SQLException ex) {
Log4jExceptionUtil.logStackTrace(ex, log);
}
}
} }
/**
* function:根据formNo删除工作(流程任务)的相关信息
* @param pConn Connection
* @param formNo String
* @exception SQLException
*/
public void deleteByFormNo(Connection pConn,String formNo) throws SQLException{
PreparedStatement ps = null;
String sql = null;
try {
sql = "delete from [job] where form_no = ?";
ps = pConn.prepareStatement(sql);
ps.setString(1, formNo);
ps.executeUpdate();
}
catch (SQLException se) {
Log4jExceptionUtil.logStackTrace(se, log);
throw new SQLException();
}
finally {
if (ps != null) {
try {
ps.close();
}
catch (SQLException ex) {
Log4jExceptionUtil.logStackTrace(ex, log);
}
}
}
} public void run() {
while (true) {
synchronized (this) {
if (!flag) {
try {
wait(1000); //休眠1秒
}
catch (InterruptedException ex) {
Log4jExceptionUtil.logStackTrace(ex, log);
}
}
}
if (flag) {
try { DBHelper helper = new DBHelper();
threadConn = helper.getConnection();
threadConn.setAutoCommit(false);
log.info("Current Thread Name=" + this.getName());
//根据formNo把已经完成的job复制到finished_process_job表中去,
//并删除job中拥有当前formNo的记录
copyFinishedJob(threadConn, formNo);
threadConn.commit();
flag = false;
}
catch (Exception ex) {
try{
threadConn.rollback();
}
catch (Exception ex1){
Log4jExceptionUtil.logStackTrace(ex1, log);
}
Log4jExceptionUtil.logStackTrace(ex, log);
}
finally {
try {
if (threadConn != null) {
threadConn.close();
threadConn = null;
}
}
catch (SQLException ex) {
Log4jExceptionUtil.logStackTrace(ex, log);
}
log.info(this.getName() + " Connection is null ? : "
+ (threadConn == null));
flag = false;
}
}
}
}
}2,调用如下:
//调用线程,
//根据formNo把已经完成的或者是被注销的job复制到finished_process_job表中去,
//并删除job中拥有当前formNo的记录
CopyFinishedJobThread thread = new CopyFinishedJobThread();
thread.start();
thread.wakeUp(true,formNo);
import java.sql.PreparedStatement;
import org.apache.log4j.*;
import com.customs.util.Log4jExceptionUtil;
import java.sql.SQLException;
import com.customs.util.DBHelper;
/**
* function: 本线程功能:根据formNo把已经完成的job复制到finished_process_job表中去
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
*/
class CopyFinishedJobThread extends Thread {
private Logger log = Logger.getLogger(this.getClass().getName());
String formNo = "";
boolean flag = false;
Connection threadConn = null;
public CopyFinishedJobThread() {
} /**
* 唤醒线程
* @param flag boolean
* @param formNo String:表单编号
*/
synchronized void wakeUp(boolean flag, String formNo) {
this.flag = flag;
this.formNo = formNo;
notify();
} /**
* function:根据formNo把已经完成的job复制到finished_process_job表中去,
* 并删除job中拥有当前formNo的记录
* @param pConn Connection
* @param formNo String
* @throws SQLException
*/
public void copyFinishedJob(Connection pConn,String formNo) throws SQLException{
PreparedStatement ps = null;
String sql = "";
try {
sql = " insert into [finished_process_job] "
+ " select * from job where form_no = ? ";
ps = pConn.prepareStatement(sql);
int i = 1;
ps.setString(i++, formNo);
ps.executeUpdate(); deleteByFormNo(pConn,formNo);//根据formNo删除job
}
catch (SQLException ex) {
Log4jExceptionUtil.logStackTrace(ex, log);
throw new SQLException();
}
finally {
if (ps != null) {
try {
ps.close();
}
catch (SQLException ex) {
Log4jExceptionUtil.logStackTrace(ex, log);
}
}
} }
/**
* function:根据formNo删除工作(流程任务)的相关信息
* @param pConn Connection
* @param formNo String
* @exception SQLException
*/
public void deleteByFormNo(Connection pConn,String formNo) throws SQLException{
PreparedStatement ps = null;
String sql = null;
try {
sql = "delete from [job] where form_no = ?";
ps = pConn.prepareStatement(sql);
ps.setString(1, formNo);
ps.executeUpdate();
}
catch (SQLException se) {
Log4jExceptionUtil.logStackTrace(se, log);
throw new SQLException();
}
finally {
if (ps != null) {
try {
ps.close();
}
catch (SQLException ex) {
Log4jExceptionUtil.logStackTrace(ex, log);
}
}
}
} public void run() {
while (true) {
synchronized (this) {
if (!flag) {
try {
wait(1000); //休眠1秒
}
catch (InterruptedException ex) {
Log4jExceptionUtil.logStackTrace(ex, log);
}
}
}
if (flag) {
try { DBHelper helper = new DBHelper();
threadConn = helper.getConnection();
threadConn.setAutoCommit(false);
log.info("Current Thread Name=" + this.getName());
//根据formNo把已经完成的job复制到finished_process_job表中去,
//并删除job中拥有当前formNo的记录
copyFinishedJob(threadConn, formNo);
threadConn.commit();
flag = false;
}
catch (Exception ex) {
try{
threadConn.rollback();
}
catch (Exception ex1){
Log4jExceptionUtil.logStackTrace(ex1, log);
}
Log4jExceptionUtil.logStackTrace(ex, log);
}
finally {
try {
if (threadConn != null) {
threadConn.close();
threadConn = null;
}
}
catch (SQLException ex) {
Log4jExceptionUtil.logStackTrace(ex, log);
}
log.info(this.getName() + " Connection is null ? : "
+ (threadConn == null));
flag = false;
}
}
}
}
}2,调用如下:
//调用线程,
//根据formNo把已经完成的或者是被注销的job复制到finished_process_job表中去,
//并删除job中拥有当前formNo的记录
CopyFinishedJobThread thread = new CopyFinishedJobThread();
thread.start();
thread.wakeUp(true,formNo);
你这个虽然用了线程技术,但是只有一个线程
没有分成几个线程而且还有个wakeUp不知道写的做什么用的
还有这个,在里面用synchronized (this) 这个是啥意思while (true) 也没必要,既然是处理数据,数据处理完了,函数自然就返回了
你这不是搞个死循环
直接在run里写数据库操作就行了调用的话直接new一个线程,然后start就算了
也就是说只需要写run和你所要做的数据库操作