读书人

请问一个多线程的有关问题。高分相送

发布时间: 2011-12-31 23:50:30 作者: rapoo

请教一个多线程的问题。急!高分相送,不够再加~
class A {
public static void setEdit(Integer value){
}
}

class B {
//执行数据库操作
public static void query() {
}
}
class C {
for(int i = 0 ; i < 100 ; i ++) {
A.setEdit();
}
B.query();
}
要求在C里面一边执行A.setEdit(),一边执行B.query。B.query是执行数据库查询,只需要执行一遍,A.setEdit()需要多次。当B.query执行完,A.setEdit()也执行完毕。

[解决办法]
为什么要一边执行A.setEdit(),一边执行B.query呢?
等A.setEdit()执行完啦,再执行B.query不行呢
[解决办法]
以需要同步的资源为锁,如果没有资源竞争(当然是不可能的了,多线程竞争的就是资源拉,只不过你没有抽象出来的话),就自己创建锁,在建立竞争的线程时传入,竞争该锁就行了,楼上的说的有理,同步问题会带来复杂性和性能上的消耗,如果可以通过改变设计等等去掉,是件好事。
[解决办法]
你的意思是不是要让setEdit()并发执行,之后执行一次查询呢?是的话,这样做:

把单个setEdit()写为一个线程

在C里这样做:
第一个循环里,开启所有线程。
第二个循环里让所有的线程join()。等待所有的edit操作结束
然后执行query
[解决办法]
我猜楼主的意思,在 query 里面进行的操作是一个耗时比较长的数据库查询(包括遍历查询结果),而在 setEdit 里面是显示查询的过程(进度)。

请问楼主是这样吗?如果是的话,我再帮你想办法 ;)
[解决办法]
回maquan( 'ma:kju)

对,就是这样~
[解决办法]
关注
[解决办法]
关注
[解决办法]
是显示查询的进度还是显示查询返回的数据?

读书人网 >J2SE开发

热点推荐