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 代码块。
当有新的线程时,判断要针对哪个对象,并判断是否有针对该对象的线程正在运行。
如果有则等待,否则继续等待。
解决方案 »
- help me!!!请教!小弟的老大让用mockito对action进行测试,
- 获得一个InputStream,里面数据是xml,如何删除其中若干行数据呢?
- 江湖救急
- XML中变量自动增加的问题
- 请问如何在jcreator下执行带参数的程序?
- 这个问题可能会让你们笑话,可不问我就不知道
- 为什么我的oracle8.17里没有class12.jar?
- 关于两个系统信息交互的问题?急急急!100分相送,分不够可以再加,欢迎来讨论
- 是否Web Service 能够实现RMI/IIOP的全部或者大部分功能?那是否可以替代他们呢?
- 项目部署域名,紧急求助
- 单例模式和静态变量
- hibernate 自身关联多对多xml如何配置?
...
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都是重新构造对象。
这个方法不行,因为每次从dao.getDatas()返回的对象值是不会变的,但是对象的标识(就是对象的内存地址)是会变的,因为每次dao.getDatas都是重新构造对象。
那就在myObject中声明一个静态String,把返回的对象值 toString赋值给静态String,把静态String放在synchronized上呀。相同String的内存是相同的
这个方法不行,因为每次从dao.getDatas()返回的对象值是不会变的,但是对象的标识(就是对象的内存地址)是会变的,因为每次dao.getDatas都是重新构造对象。
那就在myObject中声明一个静态String,把返回的对象值 toString赋值给静态String,把静态String放在synchronized上呀。相同String的内存是相同的
高人啊,虽然我没有试验这么做是否好用,但是原理简单清晰,创意无限啊。
这个方法不行,因为每次从dao.getDatas()返回的对象值是不会变的,但是对象的标识(就是对象的内存地址)是会变的,因为每次dao.getDatas都是重新构造对象。
那就在myObject中声明一个静态String,把返回的对象值 toString赋值给静态String,把静态String放在synchronized上呀。相同String的内存是相同的
高人啊,虽然我没有试验这么做是否好用,但是原理简单清晰,创意无限啊。
那就先谢谢夸奖啦