多线程已经在很多应用中使用了,但在domino中很少有相关资料,能否实现多线程应用呢?百度查查了一下java的资料是可以的,直接转移过来使用就试试,结果能正常运行。已经把一些应用转到多线程处理了,速度还是有提高 的。
1)查找百度资料,根据教程处理
http://blog.csdn.net/aboy123/article/details/38307539
2)以下是java代理的内容,还要设置代理参数(如图),否则代理在bs运行有误
import lotus.domino.*;
import java.util.concurrent.*;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
class MyCallable implements Callable<Object> {
private String taskNum;
//可以通过更改这MyCallable函数,从外传递参数进来,如unid等
MyCallable(String taskNum) {
this.taskNum = taskNum;
}
public Object call() throws Exception {
System.out.println(">>>" + taskNum + "任务启动");
Date dateTmp1 = new Date();
Thread.sleep(1000);
Date dateTmp2 = new Date();
long time = dateTmp2.getTime() - dateTmp1.getTime();
System.out.println(">>>" + taskNum + "任务终止");
return taskNum + "任务返回运行结果,当前任务时间【" + time + "毫秒】";
}
}
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// (Your code goes here)
System.out.println("----程序开始运行----");
Date date1 = new Date();
int taskSize = 5;
// 创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(taskSize);
// 创建多个有返回值的任务
List<Future> list = new ArrayList<Future>();
for (int i = 0; i < taskSize; i++) {
Callable c = new MyCallable(i + " ");
// 执行任务并获取Future对象
Future f = pool.submit(c);
// System.out.println(">>>" + f.get().toString());
list.add(f);
}
// 关闭线程池
pool.shutdown();
// 获取所有并发任务的运行结果
for (Future f : list) {
// 从Future对象上获取任务的返回值,并输出到控制台
System.out.println(">>>" + f.get().toString());
}
Date date2 = new Date();
System.out.println("----程序结束运行----,程序运行时间【"
+ (date2.getTime() - date1.getTime()) + "毫秒】");
} catch(Exception e) {
e.printStackTrace();
}
}
}
3)优化原来lotusscript,把转到java多线程处理,我这里处理的数据不多,但发现已经有改善效果。