You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
5.1 KiB

3 years ago
  1. package com.spring;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.spring.common.utils.RandomUtil;
  4. import com.spring.common.utils.RedisUtils;
  5. import com.spring.modules.sys.entity.SysUserEntity;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.apache.commons.lang.builder.ToStringBuilder;
  8. import org.junit.Test;
  9. import org.junit.runner.RunWith;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.boot.test.context.SpringBootTest;
  12. import org.springframework.test.context.junit4.SpringRunner;
  13. import java.util.concurrent.*;
  14. @RunWith(SpringRunner.class)
  15. @SpringBootTest
  16. @Slf4j
  17. public class RedisTest {
  18. @Autowired
  19. private RedisUtils redisUtils;
  20. @Test
  21. public void contextLoads() {
  22. String uuid = RandomUtil.getOrderNoByAtomic("1", "OC");
  23. SysUserEntity user = new SysUserEntity();
  24. user.setEmail("qqq@qq.com");
  25. redisUtils.set("user", user);
  26. System.out.println(ToStringBuilder.reflectionToString(redisUtils.get("user", SysUserEntity.class)));
  27. }
  28. @Test
  29. public void thread() {
  30. StringBuffer s1 = new StringBuffer();
  31. StringBuffer s2 = new StringBuffer();
  32. JSONObject jsonObject = new JSONObject();
  33. jsonObject.put("大头", new JSONObject().put("fdsafdas", "范德萨发大水"));
  34. System.out.println(jsonObject);
  35. /**
  36. *1corePoolSize核心线程数线程池中始终存活的线程数
  37. * 2maximumPoolSize: 最大线程数线程池中允许的最大线程数
  38. * 3keepAliveTime: 存活时间线程没有任务执行时最多保持多久时间会终止
  39. * 4unit: 单位参数keepAliveTime的时间单位7种可选
  40. * - TimeUnit.DAYS
  41. * - TimeUnit.HOURS 小时
  42. * - TimeUnit.MINUTES
  43. * - TimeUnit.SECONDS
  44. * - TimeUnit.MILLISECONDS 毫秒
  45. * - TimeUnit.MICROSECONDS 微妙
  46. * - TimeUnit.NANOSECONDS 纳秒
  47. * 5workQueue: 一个阻塞队列用来存储等待执行的任务均为线程安全7种可选
  48. * - ArrayBlockingQueue 一个由数组结构组成的有界阻塞队列
  49. * - LinkedBlockingQueue 一个由链表结构组成的有界阻塞队列
  50. * - SynchronousQueue 一个不存储元素的阻塞队列即直接提交给线程不保持它们
  51. * - PriorityBlockingQueue 一个支持优先级排序的无界阻塞队列
  52. * - DelayQueue 一个使用优先级队列实现的无界阻塞队列只有在延迟期满时才能从中提取元素
  53. * - LinkedTransferQueue 一个由链表结构组成的无界阻塞队列与SynchronousQueue类似还含有非阻塞方法
  54. * - LinkedBlockingDeque 一个由链表结构组成的双向阻塞队列
  55. * 较常用的是LinkedBlockingQueue和Synchronous线程池的排队策略与BlockingQueue有关
  56. * 6threadFactory: 线程工厂主要用来创建线程默及正常优先级非守护线程
  57. * 7handler拒绝策略拒绝处理任务时的策略4种可选默认为AbortPolicy
  58. * - AbortPolicy 拒绝并抛出异常
  59. * - CallerRunsPolicy 重试提交当前的任务即再次调用运行该任务的execute()方法
  60. * - DiscardOldestPolicy 抛弃队列头部最旧的一个任务并执行当前任务
  61. * - DiscardPolicy 抛弃当前任务
  62. */
  63. ExecutorService executorService = new ThreadPoolExecutor(2, 10,
  64. 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(5, true),
  65. Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
  66. executorService.execute(() -> {
  67. // 获取线程名称,默认格式:pool-1-thread-1
  68. synchronized (s1) {
  69. s1.append("a");
  70. s2.append("1");
  71. try {
  72. Thread.sleep(100);
  73. } catch (InterruptedException e) {
  74. e.printStackTrace();
  75. }
  76. synchronized (s2) {
  77. System.out.println("s2执行中");
  78. s1.append("b");
  79. s2.append("2");
  80. System.out.println(s1);
  81. System.out.println(s2);
  82. }
  83. }
  84. });
  85. executorService.execute(() -> {
  86. // 获取线程名称,默认格式:pool-1-thread-1
  87. synchronized (s2) {
  88. s1.append("c");
  89. s2.append("3");
  90. try {
  91. Thread.sleep(100);
  92. } catch (InterruptedException e) {
  93. e.printStackTrace();
  94. }
  95. synchronized (s1) {
  96. s1.append("d");
  97. s2.append("4");
  98. System.out.println(s1);
  99. System.out.println(s2);
  100. }
  101. }
  102. });
  103. }
  104. @Test
  105. public void t6() {
  106. String s = "sss\\999";
  107. String s1 = s.replaceAll("\\\\", "\\\\\\\\");
  108. System.out.println(s1);
  109. }
  110. }