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

package com.gaotao;
import com.alibaba.fastjson2.JSONObject;
import com.gaotao.common.utils.RedisUtils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.concurrent.*;
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class RedisTest {
@Autowired
private RedisUtils redisUtils;
@Test
public void thread() {
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = new StringBuffer();
JSONObject jsonObject = new JSONObject();
jsonObject.put("大头", new JSONObject().put("fdsafdas", "范德萨发大水"));
System.out.println(jsonObject);
/**
*(1)corePoolSize:核心线程数,线程池中始终存活的线程数。
* (2)maximumPoolSize: 最大线程数,线程池中允许的最大线程数。
* (3)keepAliveTime: 存活时间,线程没有任务执行时最多保持多久时间会终止。
* (4)unit: 单位,参数keepAliveTime的时间单位,7种可选。
* - TimeUnit.DAYS 天
* - TimeUnit.HOURS 小时
* - TimeUnit.MINUTES 分
* - TimeUnit.SECONDS 秒
* - TimeUnit.MILLISECONDS 毫秒
* - TimeUnit.MICROSECONDS 微妙
* - TimeUnit.NANOSECONDS 纳秒
* (5)workQueue: 一个阻塞队列,用来存储等待执行的任务,均为线程安全,7种可选。
* - ArrayBlockingQueue 一个由数组结构组成的有界阻塞队列。
* - LinkedBlockingQueue 一个由链表结构组成的有界阻塞队列。
* - SynchronousQueue 一个不存储元素的阻塞队列,即直接提交给线程不保持它们。
* - PriorityBlockingQueue 一个支持优先级排序的无界阻塞队列。
* - DelayQueue 一个使用优先级队列实现的无界阻塞队列,只有在延迟期满时才能从中提取元素。
* - LinkedTransferQueue 一个由链表结构组成的无界阻塞队列。与SynchronousQueue类似,还含有非阻塞方法。
* - LinkedBlockingDeque 一个由链表结构组成的双向阻塞队列。
* 较常用的是LinkedBlockingQueue和Synchronous。线程池的排队策略与BlockingQueue有关。
* (6)threadFactory: 线程工厂,主要用来创建线程,默及正常优先级、非守护线程。
* (7)handler:拒绝策略,拒绝处理任务时的策略,4种可选,默认为AbortPolicy。
* - AbortPolicy 拒绝并抛出异常。
* - CallerRunsPolicy 重试提交当前的任务,即再次调用运行该任务的execute()方法。
* - DiscardOldestPolicy 抛弃队列头部(最旧)的一个任务,并执行当前任务。
* - DiscardPolicy 抛弃当前任务。
*/
ExecutorService executorService = new ThreadPoolExecutor(2, 10,
1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(5, true),
Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
executorService.execute(() -> {
// 获取线程名称,默认格式:pool-1-thread-1
synchronized (s1) {
s1.append("a");
s2.append("1");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (s2) {
System.out.println("s2执行中");
s1.append("b");
s2.append("2");
System.out.println(s1);
System.out.println(s2);
}
}
});
executorService.execute(() -> {
// 获取线程名称,默认格式:pool-1-thread-1
synchronized (s2) {
s1.append("c");
s2.append("3");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (s1) {
s1.append("d");
s2.append("4");
System.out.println(s1);
System.out.println(s2);
}
}
});
}
@Test
public void t6() {
String s = "sss\\999";
String s1 = s.replaceAll("\\\\", "\\\\\\\\");
System.out.println(s1);
}
}