Multi-threaded in-place Mergesort on Java
Quick-Glance nitpicks


elements can (and should) be final. This reinforces the point that you're not changing that reference.
Always place braces around blocks. That's especially true for single-line if-blocks like the element size guard.
Somewhat interestingly inside merge you placed the braces in all if-blocks except the last.
You're inconsistent in the spacing for conditionals. In merge the inner if-statement's conditionals are surrounded by spaces, everywhere else, they are not. I personally prefer putting a space before the opening parenthesis of any condition, if only to distinguish it from a method invocation.


Density of semantics

The swap calls in merge are rather heavy in what they do. There's a lot going on at once, relying on a conscious and full understanding of unary operators and how the method works.

If I were you, I'd consider extracting the incrementing of the indices to separate statements. That can also make the reasoning somewhat easier to understand, seeing that leftIndex++ is in every branch of the tree:

    while (leftIndex &lt; left.size()) {
        if (rightIndex == 0) {
            if (left.get(leftIndex).compareTo(right.get(rightIndex)) &gt; 0) {
                swap(left, leftIndex, right, rightIndex);
                rightIndex++;
            }
        } else if (right.get(0).compareTo(right.get(rightIndex)) &gt; 0) {
            swap(left, leftIndex, right, 0);
        } else {
            swap(left, leftIndex, right, rightIndex);
            rightIndex++;
        }
        leftIndex++;
    }


At this point it should also be clear that the first if-statements can be collapsed into a single statement.
  JS1 mentions that the in-place merge you are doing does not work for all cases.
  Unfortunately I can't tell you quite exactly why, but making the code easier to grasp should help troubleshooting and fixing this :)

Optional List features

You're making use of the set operation on Lists. 
It's important to be aware that set is an optional operation. 
Not all implementations of List provide an implementation and may throw UnsupportedOperationExcpetion instead.
Then again all the other features you could use to replace this are also optional (what with modification of Lists being optional)...