我本人刚开始学Java,一头雾水😭
我想的是创建四个类:
- 缓冲类,放入正向排序和反向排序的方法,然后加synchronized实现同步,再加wait和notify配合
- 正向排序类
- 反向排序类
- 测试类
这个写总觉得有些麻烦,特别是临界代码那里,有什么更简单的方法吗?
我本人刚开始学Java,一头雾水😭
可以使用ThreadLocal来隔离这个共享的数组,每次排序都是用这个共享变量的副本
public class Test {
private static ThreadLocal<int[]> arrThreadLocal = new ThreadLocal<int[]>(){
@Override
protected int[] initialValue() {
return new int[]{1, 4, -22, 12312, 211, -213123};
}
};
public static void main(String[] args) {
List<Thread> waitStartThread = new ArrayList<>();
for (int i = 0; i < 2; i++) {
int finalI = i;
Thread thread = new Thread(() -> {
sortArr(finalI);
});
waitStartThread.add(thread);
}
for (int i = 0; i < 2; i++) {
waitStartThread.get(i).start();
}
}
private static void sortArr(int sortType) {
// 升序
if (sortType == 0){
Arrays.sort(arrThreadLocal.get());
System.out.println(Thread.currentThread().getName() + Arrays.toString(arrThreadLocal.get()));
}
// 降序
else {
Arrays.sort(arrThreadLocal.get());
int[] sortedArr = arrThreadLocal.get();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < sortedArr.length; i++) {
list.add(sortedArr[i]);
}
Collections.reverse(list);
System.out.println(Thread.currentThread().getName() + list);
}
arrThreadLocal.remove();
}
}