请教一个多线程的问题。急!高分相送,不够再加~

ismyjudy 2007-04-13 10:15:08
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()也执行完毕。
...全文
317 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
CrazyGou 2007-04-17
  • 打赏
  • 举报
回复
是显示查询的进度还是显示查询返回的数据?
likgui 2007-04-17
  • 打赏
  • 举报
回复
关注
ismyjudy 2007-04-17
  • 打赏
  • 举报
回复
就是Swing
maquan 2007-04-13
  • 打赏
  • 举报
回复
我猜楼主的意思,在 query 里面进行的操作是一个耗时比较长的数据库查询(包括遍历查询结果),而在 setEdit 里面是显示查询的过程(进度)。

请问楼主是这样吗?如果是的话,我再帮你想办法 ;)
goziung 2007-04-13
  • 打赏
  • 举报
回复
你的意思是不是要让setEdit()并发执行,之后执行一次查询呢?是的话,这样做:

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

在C里这样做:
第一个循环里,开启所有线程。
第二个循环里让所有的线程join()。等待所有的edit操作结束
然后执行query
angelleecash 2007-04-13
  • 打赏
  • 举报
回复
以需要同步的资源为锁,如果没有资源竞争(当然是不可能的了,多线程竞争的就是资源拉,只不过你没有抽象出来的话),就自己创建锁,在建立竞争的线程时传入,竞争该锁就行了,楼上的说的有理,同步问题会带来复杂性和性能上的消耗,如果可以通过改变设计等等去掉,是件好事。
weichenggao 2007-04-13
  • 打赏
  • 举报
回复
为什么要一边执行A.setEdit(),一边执行B.query呢?
等A.setEdit()执行完啦,再执行B.query不行呢
maquan 2007-04-13
  • 打赏
  • 举报
回复
不过,如果你的 UI 是 Swing 的话,就没有 System.out.print 这么简单了,建议你去查一个叫做 SwingWorker 的东西。
maquan 2007-04-13
  • 打赏
  • 举报
回复
package test;

public class TestProgress {
public static void main(String[] args) {
MyProgress prog = new MyProgress();
new Thread(prog).start();
DB.query();
prog.stop();
}
}

class MyProgress implements Runnable {
private boolean bStop = false;
private int count = 0;
public void run() {
while(!bStop) {
UI.setEdit(new Integer(count++));
try {
Thread.sleep(500);
} catch (InterruptedException e) { }
}
}
public synchronized void stop() {
bStop = true;
}
}

class UI {
public static void setEdit(Integer value) {
System.out.println(value);
}
}

class DB {
public static void query() {
System.out.println("before query.");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("after query.");
}
}
o652450 2007-04-13
  • 打赏
  • 举报
回复
关注
ismyjudy 2007-04-13
  • 打赏
  • 举报
回复
回maquan('ma:kju)

谢谢,最好有代码~
ismyjudy 2007-04-13
  • 打赏
  • 举报
回复
回maquan('ma:kju)

对,就是这样~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧