首先声明使用Vector的时候线程并不是安全的,使用get访问Vector时出现了越界,这里只是讲述笔者在实际开发中vector的应用
1 初始化一个实体类 UserSynAndSubs userSynAndSub = new UserSynAndSubs();
实体类UserSynAndSubs();有对应的get和set方法
添加:
Constants.userSynAndSubVector.add(userSynAndSub);
2 定义常量对象类Constants,项目中使用的是Constants中创建对象
Constants.userSynAndSubVector.add(userSynAndSub);
创建线程类:
public InsertSubscribeUserThread(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected static Logger logger = Logger.getLogger(ControlThread.class
.getName());
private boolean running = true;
private SessionFactory sessionFactory;
private SessionDao sd = new SessionDao(sessionFactory);
public void setRunning(boolean running) {
this.running = running;
}
private long sleeptime = 3000;
public void run() {
while (running) {
if (Constants.i >= 0) {
Constants.i--;
}
try {
int vCount = 0;
if (Constants.subcribeUserVector != null
&& Constants.subcribeUserVector.size() > 0) {
Vector<SubscribeUser> v = (Vector<SubscribeUser>) Constants.subcribeUserVector
.clone();
Constants.subcribeUserVector.removeAll(v);
doInsertByJDBC(v);
vCount = v.size();
v.clear();
}
// 画图
GetDataForPic getDataForPic = new GetDataForPic();
getDataForPic.getDRData(vCount);
Thread.sleep(sleeptime);
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
}
}
}
public void doInsertByJDBC(final Vector<SubscribeUser> v) {
Session s = null;
Transaction tx = null;
try {
s = sessionFactory.openSession();
tx = s.beginTransaction();
Work work = new Work() {
public void execute(Connection conn) throws SQLException {String sql = "insert into bs_subsribe_user(id,GUID,Source_Number,Message,Original_Message,Destination,Unique_Identifier,Date_Received,"
+ " MOID, TELCOID, Country,Provider,Extra_Param) "
+ "values(seq_subsribeuser.nextVal,?,?,?,?,?,?,?,?,?,?,?,?)";
Session session = null;
PreparedStatement prest = null;
try {
prest = conn.prepareStatement(sql,
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
session = sessionFactory.openSession();
for (SubscribeUser subuser : v) {
prest.setString(1, subuser.getGUID()); prest.setString(2,subuser.getSourceNumber());
prest.setString(3, subuser.getMessage()); prest.setString(4,subuser.getOriginalMessage()); prest.setString(5,subuser.getDestination()); prest.setString(6,subuser.getUniqueIdentifier()); prest.setObject(7,subuser.getDateReceived()); prest.setString(8,subuser.getMOID()); prest.setString(9, subuser.getTELCOID()); prest.setString(10,subuser.getCountry()); prest.setString(11,subuser.getProvider()); prest.setString(12, subuser.getExtraParam());
prest.addBatch();
}
} catch (Exception e) {
e.printStackTrace();
logger.error(e .getMessage());
}finally{
if(session!=null){
session.close();
}
prest.executeBatch();
}
}
};
s.doWork(work);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
if(s!=null){
s.close();
}
}
}