多线程处理写法

简介: 多线程处理

1.rxjava,observeOn(Schedulers.io())封装多线程,

Flowable.fromArray(ips)
.observeOn(Schedulers.io())
.flatMap(
ip -> Flowable.fromCallable(
() -> {
Boolean check = check(ip);
checkResult.put(ip,check);
return check;
}
)
).blockingSubscribe();
return checkResult;




2.线程池, 在线程池中执行saltStackUtil.restartJavaSync方法的同步,其返回值放入执行consummer

private static final ExecutorService executorService = Executors.newFixedThreadPool(10, new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setName("javaOperator");
return thread;
}

});




public void restartJava(String ip, String projectName, String commitId, String jarName, String jvmArgs, Consumer<AppServerOperateResult> appServerOperateResultConsumer) throws SaltException {
executorService.execute(() ->{
AppServerOperateResult appServerOperateResult = new AppServerOperateResult();
appServerOperateResult.setIp(ip);
appServerOperateResult.setProjectName(projectName);
appServerOperateResult.setCommitId(commitId);
appServerOperateResult.setJarName(jarName);
appServerOperateResult.setStartTime(new Date());
appServerOperateResult.setStatus(Constant.JAVA_APP_OPERATE_PROCESS);
appServerOperateResult.setType(Constant.JAVA_APP_OPERATE_RESTART);
appServerOperateResult.setRunParamater(jvmArgs);
Map<String, Result<Map<String, State.ApplyResult>>> stringResultMap = null;
try {
stringResultMap = saltStackUtil.restartJavaSync(ip, projectName, commitId, jarName, jvmArgs);
processResult(stringResultMap,appServerOperateResult);
appServerOperateResultConsumer.accept(appServerOperateResult);
} catch (Exception e) {
MyExceptionHandler.handlerException(e,logger);
}

});

}


3.stream,parallel()并行流执行foreach,consummer封装返回数据到checkResult Map中


Stream.of(ips).filter(ip -> ip!=null).parallel().forEach(new Consumer<String>() {
@Override
public void accept(String ip) {
checkResult.put(ip, check(ip, appId, appTypeCode));
}
});

return checkResult;







目录
相关文章
|
2月前
多线程案例-定时器(附完整代码)
多线程案例-定时器(附完整代码)
246 0
|
9月前
多线程的三种实现代码
多线程的三种实现代码
54 0
|
4月前
|
安全 Java Python
多线程和并发编程:在Python中,GIL(全局解释器锁)的作用是什么?为什么它会影响多线程程序的性能?举例说明在Python中使用线程池的优点,并编写一个简单的线程池实现。
多线程和并发编程:在Python中,GIL(全局解释器锁)的作用是什么?为什么它会影响多线程程序的性能?举例说明在Python中使用线程池的优点,并编写一个简单的线程池实现。
|
10月前
在多线程中某段代码只执行一次
使用Automic包中的AtomicBoolean结合CAS来实现。当只希望需要某段代码在多线程中只执行一次的时候,此时你会发现boolean这个变量类型是多么有用。
86 0
|
Java
Java实现多线程的第三种方式及多线程实现的方式间的比较
再调用get方法,就可以获取线程结束之后的结果。(==get方法一定要放在start之后执行,因为它是获取线程结束之后的结果,如果线程还没有开启或结束,那么get会在那卡着一直等==)
89 0
Java实现多线程的第三种方式及多线程实现的方式间的比较
C++多线程 并行与并发 了解进程和线程 浅显的进行传参,调用
C++多线程 并行与并发 了解进程和线程 浅显的进行传参,调用
C++多线程 并行与并发 了解进程和线程 浅显的进行传参,调用
|
Java 调度
Java线程同步(含详细解释/代码实例)
Java线程同步(含详细解释/代码实例)
166 0
Java线程同步(含详细解释/代码实例)
|
程序员 索引
for 循环的 5 种写法,哪种最快?
几种遍历方法中for执行最快,它没有任何额外的函数调用栈和上下文。但在实际开发中我们要结合语义话、可读性和程序性能,去选择究竟使用哪种方案。下面来看for , foreach , map , for...in , for...of五种方法现场battle。
多线程通信的三大法器,你真的会用吗?
wait, notify, notifyAll 是多线程之间通信最重要的 3 个方法,今天,栈长给大家普及一下它们的知识要点及应用实战。