举个例子:
有一Manager对象负责对某个文件进行下载,从Manager中new出多个线程,每个线程负责对目标文件的一片进行下载,当
所有线程都把各自负责的文件片下载完成后,Manager开始调用方法将文件片组装成整个一文件,那么我想问,这里Manager
是如何监测到所有的线程都完成下载任务那一时刻??每一个线程完成任务后需要做什么才能让Manager知道它做完了?
有一Manager对象负责对某个文件进行下载,从Manager中new出多个线程,每个线程负责对目标文件的一片进行下载,当
所有线程都把各自负责的文件片下载完成后,Manager开始调用方法将文件片组装成整个一文件,那么我想问,这里Manager
是如何监测到所有的线程都完成下载任务那一时刻??每一个线程完成任务后需要做什么才能让Manager知道它做完了?
解决方案 »
- javac能通过,可是java时却出现Exception in thread "main" java.lang.NoSuchMethodError:main这样
- 请问 求数组的长度的时候为什么会有错误? 人在线 有答案马上结贴
- java数组初始化
- 关于java中空字符串问题
- 进度条中的进度是真实的程序执行进度吗?
- 请教如何读取网卡上收到的数据包
- 菜鸟问题之 学java 要怎么建环境,我下载安装了jdk却不行?在线等待!
- 请问..有没有网络中线程的模式参考???
- Mastering Enterprise Java Beans在哪有中文版下载
- 如何用java将网页上的图片下载到本地目录下
- 用什么东西可以吧.class转换成.exe啊?
- linux下面mkdirs相对路径的问题
public StatusEvent {
Sting statusText;
public StatusEvent(String statusText) {
this.statusText = statusText;
}
public String getStatusText() {
return statusText;
}
}SomeSwingController.java
EventBus.publish(new StatusEvent("Looking up data..."));
注:可以在线程下载结束是发布一个Event/Message
StatusBar.java
public StatusBar extends JLabel implements EventSubscriber {
public StatusBar() {
EventBus.subscribe(StatusEvent.class, this);
}
public void onEvent(Object evt) {
StatusEvent statusEvent = (StatusEvent)evt;
this.setText(statusEvent.getStatusText();
}
}Using annotations, StatusBar.java is a bit simpler (the other files stay the same):
public StatusBar extends JLabel {
public StatusBar() {
AnnotationProcessor.process(this);
}
@EventSubscriber(eventClass=StatusEvent.class)
public void updateStatus(StatusEvent statusEvent) {
this.setText(statusEvent.getStatusText();
}
}
因为java中变量是值传递,而对象是引用传递,所以考虑new一个对象出来,每个分任务线程持有它的引用,再设置一个监听线程,不断扫描此对象的数据,从而达到目的。
我这样做不知道合适不合适