关于线程同步问题,请各位高手指点

业务:就是从数据库查询符合条件的数据,在把数据插入到另一个表.再把数据的状态改变.
例如:先查询状态为1的5条数据,把这5条数据插入到另一个表,在把这5条数据的状态变为2.

出现的问题:因为是多人操作,如果是时间刚好在一起.就会出现数据并发性.

解决问题:我是用同步去解决的.测试的时候把线程的名称打印出来..是按照顺序来的.

例如:有两条线程13,14 .如果13先获得这个锁,那么14就要等到13完成才到14开始.

用了同步还会出现的问题:但是一放到正式环境下面,他有时候还是会出现数据并发?这是为什么呀.
是不是线程同步有精确的时间..如果超过了这个时间他就不能同步呢?请高手指点下

部分代码: private static Object lock=new Object();
public int insertScheduleOrder(ScheduleOrderForm form) throws Exception {
synchronized(lock){//线程同步内容}
}

是啊,这是同步出现的死锁问题啊,解决这个问题的根本解决办法是使用JTA事务。