Если я правильно понимаю ваше описание, у вас есть только 2 темы. Невозможно использовать 4 ядра одновременно с 2 потоками. В идеале вам нужно как минимум столько потоков, сколько имеется ядер в системе. При неравномерном распределении затрат в наборе Мандельброта (вычисления для точек в наборе обходятся дороже, чем за пределами набора), оптимальное количество потоков может быть выше (я бы попробовал 4 × количество ядер).
Я разделил цикл for, который вычисляет цвет каждого пикселя на 2 половины
Я не уверен, что вы имеете в виду здесь, но вам, вероятно, следует разделить самый внешний цикл (который проходит через координаты Y) между потоками. Это уменьшит вероятность того, что два или более ЦП будут бороться за одну и ту же строку кэша (при условии, что изображение отображается в порядке основной строки).
Примечание: Runtime.getRuntime().availableProcessors
скажет вам, сколько ядер у системы.