Cra*_*lus 4 java concurrency multithreading swingworker
我正在使用SwingWorkers来使我的GUI响应.但是我无法理解以下内容:当用户按下按钮时,我想从GUI调用远程方法.我有按钮的动作内部(问题的提示的简称):
//in action of button
SwingWorker worker = new SwingWorker<boolean,Void>(){
@Override
public boolean doInBackground(){
return call_remote_method_here();
}
};
worker.execute();
//some other code
Run Code Online (Sandbox Code Playgroud)
我的问题是虽然gui似乎响应,但对远程方法的实际调用是顺序的而不是并发的.我在网络跟踪中注意到它,并认为该方法是阻塞的.但后来我在踪迹中看到SwingWorkers似乎在顺序运行.从
log 2010-09-06 16:58:22,962 [ SwingWorker-pool-4-thread-1 ] DEBUG - >第一个远程方法调用
我得到了响应,然后第二个swingworker运行
2010-09-06 16:58:23,227 [ SwingWorker-pool-4-thread-1 ] DEBUG - >第二个远程方法调用
为什么会这样?我认为这是随机交错,但我注意到2个实例具有相同的名称?摇摆工人是否合并?这是随机行为吗?不是我看到2个并发呼叫?如果他们被重用,我有什么可以做并发呼叫而不是并行的吗?
谢谢
问题是,所有Swingworkers都在相同的Background-Thread上运行.当您希望它们运行并发时,您可以将它们添加到这样的Executor服务中,例如:
Executor executor = Executors.newCachedThreadPool();
executor.execute(yourSwingWorker);
Run Code Online (Sandbox Code Playgroud)
来源:Oracle论坛
| 归档时间: |
|
| 查看次数: |
1254 次 |
| 最近记录: |