日期:2014-05-20  浏览次数:20752 次

请教一个多线程的问题。急!高分相送,不够再加~
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)

对,就是这样~
------解决方案--------------------
关注
------解决方案--------------------
关注
------解决方案--------------------
是显示查询的进度还是显示查询返回的数据?