请问这个Java多线程问题怎么写?可以提供一些思路吗?

我本人刚开始学Java,一头雾水😭

img


我想的是创建四个类:

  1. 缓冲类,放入正向排序和反向排序的方法,然后加synchronized实现同步,再加wait和notify配合
  2. 正向排序类
  3. 反向排序类
  4. 测试类
    这个写总觉得有些麻烦,特别是临界代码那里,有什么更简单的方法吗?

可以使用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();
    }

}

img