作为一个`老`程序员,我本身是很少会使用多线程去实现业务逻辑的。原因主要有以下两点:
虽然我很少使用多线程,但是并不是说不去了解她
。
本文,提供一个简化的案例来展示如何快速使用多线程,即使用线程池。
简单案例
1. 线程池与业务数据准备
public class MultiDemo {
public void test() {
// 准备10个线程的线程组
ExecutorService service = Executors.newFixedThreadPool(10);
List<Future<Boolean>> rst = new ArrayList<>();
// 业务数据准备,省略。。。
// 将业务数据分100分,放入线程组中。
for (int i = 0; i < 100; i++) {
Future<Boolean> future = service.submit(new CallableDemo(i));
rst.add(future);
}
service.shutdown();
// 线程组处理结果处理
Boolean flag;
for (Future<Boolean> future : rst) {
try {
flag = future.get();
if (flag == null || !flag) {
System.out.println("处理失败 flag: " + flag);
// 业务数据补偿逻辑
} else {
System.out.println("处理成功 flag: " + flag);
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
}
2. 业务数据处理逻辑
public class CallableDemo implements Callable<Boolean> {
private int i;
public CallableDemo(int i) {
// 拆分后需要处理的业务数据
this.i = i;
}
@Override
public Boolean call() throws Exception {
// 业务数据处理逻辑
Thread.sleep(100L);
System.out.println(Thread.currentThread().getName() + " i: " + i);
return true;
}
}
3. 运行结果
pool-1-thread-3 i: 90
pool-1-thread-5 i: 96
处理成功 flag: true
处理成功 flag: true
pool-1-thread-7 i: 92
pool-1-thread-9 i: 98
pool-1-thread-6 i: 97
pool-1-thread-2 i: 95
处理成功 flag: true
处理成功 flag: true
处理成功 flag: true
处理成功 flag: true
处理成功 flag: true
处理成功 flag: true
处理成功 flag: true
pool-1-thread-8 i: 99
处理成功 flag: true
注意事项
非常简单的案例,适用于简单的大量数据清理工作。
可能存在的问题:
小结
时间管理很重要!!!
这个周末,又一次成功“强迫”自己学习。
感谢各位小伙伴的阅读,这里是一个技术人的学习与分享。