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.

119 lines
4.7 KiB

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