content: package org.jeecg.boot.starter.lock.test;
  
  import org.junit.Test;
  import org.junit.runner.RunWith;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.boot.test.context.SpringBootTest;
  import org.springframework.test.context.junit4.SpringRunner;
  
  import java.util.concurrent.ExecutorService;
  import java.util.concurrent.Executors;
  import java.util.concurrent.TimeUnit;
  import java.util.stream.IntStream;
  
  @RunWith(SpringRunner.class)
  @SpringBootTest(classes = LockTestApplication.class)
  public class LockTest {
      @Autowired
      LockService lockService;
  
      /**
       * 测试分布式锁(模拟秒杀)
       */
      @Test
      public void test1() throws Exception {
          ExecutorService executorService = Executors.newFixedThreadPool(6);
          IntStream.range(0, 30).forEach(i -> executorService.submit(() -> {
              try {
                  lockService.seckill("20120508784");
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }));
          executorService.awaitTermination(30, TimeUnit.SECONDS);
      }
  
      /**
       * 测试分布式锁(模拟秒杀)
       */
      @Test
      public void test2() throws Exception {
          ExecutorService executorService = Executors.newFixedThreadPool(6);
          IntStream.range(0, 30).forEach(i -> executorService.submit(() -> {
              try {
                  lockService.seckill2("20120508784");
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }));
          executorService.awaitTermination(30, TimeUnit.SECONDS);
      }
  
      /**
       * 测试分布式锁(模拟重复提交)
       */
      @Test
      public void test3() throws Exception {
          ExecutorService executorService = Executors.newFixedThreadPool(6);
          IntStream.range(0, 20).forEach(i -> executorService.submit(() -> {
              try {
                  lockService.reSubmit("test");
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }));
          executorService.awaitTermination(30, TimeUnit.SECONDS);
      }
  }
  