当然可能有同步问题,主要是你的zone变量。如果你的run操作要改变zone,你必须同步它。如下:
public void run(){
//对数据库表进行一些操作,但每个线程操作的都是表中不同的记录,根据zone来区分。
synchronized(zone)
{
//Do something about the zone.
}
}
public void run(){
//对数据库表进行一些操作,但每个线程操作的都是表中不同的记录,根据zone来区分。
synchronized(zone)
{
//Do something about the zone.
}
}
类的成员函数为多个对象共有.
而成员变量是对象私有的.
你的代码中通过对象变量来确定线程的操作而成员变量不是共享资源.
所以对于变量zone不应该同步.
同步与否要看你有没有共享资源.
你的同步应该在你的RUN()方法里.
如果你经验丰富,
可以同步代码段那是很高效的.
语发格式:
void fun()
{
sychronized(THIS)
{
///需要同步的代码 }
}
for(int i=0;i<10;i++){
Zone zone = 从列表中取得一zone对象
OperateThread operate = new OperateThread(Zone zone);//Zone为自定义类
operate.start();
}class OperateThread extends Thread{
Zone zone = null;
OperateThread(Zone zone){
this.zone = zone;
}
public void run(){
//对数据库表进行一些操作,但每个线程操作的都是表中不同的记录,根据zone来区分。
}
}
主要是同时有多个线程在操作同一张表中的不同记录。我想不会有同步问题,你们以为呢?
我觉得需要同步的是你正在修改某条记录的代码,你不能让一个线程修改某条记录,还没完成提交,而又让其它的线程来修改同样的记录
具体怎么做,再想想
假设:
Zone zone1 = new Zone(10);
Zone zone2 = new Zone(10);
这两个肯定不是同一个对象吧,那你
synchronized(zone){
}
有用吗?
但这两者操作的还是同一条记录. 解决其实很简单,当你去修改某条记录的时候,在准备update那瞬间,把这条记录lock就可以拉
http://www.csdn.net/Develop/read_article.asp?id=17290