public void run() {//int[] numbers, int low, int high) {
        System.out.println(low + ":" + high);
        int i = low, j = high;
        // Get the pivot element from the middle of the list
        int pivot = numbers[low + (high - low) / 2];

        // Divide into two lists
        while (i <= j) {
            // If the current value from the left list is smaller then the pivot
            // element then get the next element from the left list
            while (numbers[i] < pivot) {
                i++;
            }
            // If the current value from the right list is larger then the pivot
            // element then get the next element from the right list
            while (numbers[j] > pivot) {
                j--;
            }

            // If we have found a values in the left list which is larger then
            // the pivot element and if we have found a value in the right list
            // which is smaller then the pivot element then we exchange the
            // values.
            // As we are done we can increase i and j
            if (i <= j) {
                exchange(numbers, i, j);
                i++;
                j--;
            }
        }
        Thread t = null, t2 = null;
        // Recursion
        if (low < j) {
            t = new ParQuicksort(numbers, low, j);
            t.start();
//            quicksort(numbers, low, j);
        }
        if (i < high) {
            t2 = new ParQuicksort(numbers, i, high);
            t2.start();
//            quicksort(numbers, i, high);
        }
        try {
            if (t != null) {
                t.join();
            }
            if (t2 != null) {
                t2.join();
            }
        } catch (InterruptedException ex) {
            Logger.getLogger(ParQuicksort.class.getName()).log(Level.SEVERE, null, ex);
        }

    }