private void testMultiThreadCall() throws ExecutionException, InterruptedException {
        RpcInternalContext.getContext();
        RpcInternalContext.pushContext();
        ExecutorService newThreadPool = new ThreadPoolExecutor(10, 10,
                10L, TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(10));
        CountDownLatch countDownLatch = new CountDownLatch(10);
        List<Future<String>> futureList = new ArrayList<>();
        for(int i=0; i<20 ;i++){
            Future<String> future = newThreadPool.submit(new Callable() {
                @Override
                public Object call() throws Exception {
                    countDownLatch.countDown();
                    countDownLatch.await();
                    try {
                        RpcInternalContext.getContext();
                        RpcInternalContext.pushContext();
                        RpcInternalContext.removeContext();
                        RpcInternalContext.popContext();
                        return null;
                    } catch (NoSuchElementException e) {
                        Assert.fail();
                    }
                    return null;
                }
            });
            futureList.add(future);
        }

        for (Future future: futureList){
            future.get();
        }
        RpcInvokeContext.removeContext();
        RpcInternalContext.popContext();
        RpcInternalContext.removeAllContext();
    }
@author <a href="mailto:zhanggeng.zg@antfin.com">GengZhang</a>
core/api/src/test/java/com/alipay/sofa/rpc/context/RpcInternalContextTest.java