关于java线程锁的有关问题

关于java线程锁的问题。
private static Object lock = new Object();
...
public void run(){
while(true){
synchronized(lock){
List<myObject> datas = dao.getDatas();
for(myObject data : datas){
myThread thread = new myThread();     
thread.start();     
}
}
}
}
public class myThread extends Thread{
public void run(){   
synchronized(xxx){
//do something
}
}
}

在XXX处,应该怎么写,才能让线程针对每个myObject对象获取锁。
比如说List<myObject> datas = dao.getDatas()从数据库中获取到2个对象,
data1,data2,可以有两个线程运行  do something  代码块。
当有新的线程时,判断要针对哪个对象,并判断是否有针对该对象的线程正在运行。
如果有则等待,否则继续。


------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:


...
for(myObject data : datas){
                myThread thread = new myThread(data);                   
                thread.start();               
            }
...

public class myThread extends Thread{

   private myObject o = null;
   public myThread (myObject o){
    this.o = o;
}
    public void run(){   
        synchronized(o){
            //do something                                   
        }
    }                           
}


这个方法不行,因为每次从dao.getDatas()返回的对象值是不会变的,但是对象的标识(就是对象的内存地址)是会变的,因为每次dao.getDatas都是重新构造对象。

那就在myObject中声明一个静态String,把返回的对象值 toString赋值给静态String,把静态String放在synchronized上呀。相同String的内存是相同的

高人啊,虽然我没有试验这么做是否好用,但是原理简单清晰,创意无限啊。

关于java线程锁的有关问题那就先谢谢夸奖啦