做性能优化时,遇到一些跨不过的坎,如果能够绕过问题本身来解决该问题也是不错的选择。本人在做 MongoDB 联合查询时,遇到了性能瓶颈,使用 MongoDB 内部联合查询时 Mongo竟然不会使用索引,效率低下,不得采用数据库外部联合查询来解决。那么,问题来了,两种方式优势与劣势同样明显,若要同时运用两种查询方式的优势,避其短处,本人采用了竞争式查询。在不同的场景下,两者同时执行,谁最快执行完成,就用谁,保证执行时间最短。这种方式也是典型的用资源或者空间换时间的做法了。
多线程竞争代码如下:
package com.zhaoxj_2017.tools;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.concurrent.*;
public class CompetitiveExecutor {
@Test
public void execute() throws InterruptedException {
ExecutorService executorService = Executors.newCachedThreadPool();
long startTime = System.currentTimeMillis();
List<FutureTask<Integer>> tasks = new ArrayList<>();
Signal signal = new Signal();