Redimensionar Imagens JPG

Gostaria de saber qual é o jeito mais eficiente de redimensionar imagens JPG. Eu estou querendo fazer um sistema do tipo batch, o usuário envia um arquivo zip e o sistema se encarrega de redimensionar as imagens.
Bem, meu problema eh o seguinte: O sistema que eu estou usando é muito lento, vou explicá-lo melhor.

Tenho um metodo que cuida de receber os objetos de upload do formulario. Ele manda um InputStream pra uma classe que dezipa o arquivo. Essa classe recebe o InputStream e envia um ZipInputStream (um pra cada aquivo do zip) pra classe que redimensiona. O metodo nesssa é o doResize.

Esse é o codigo da minha classe que redimensiona as imagens:

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Panel;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public void doResize(InputStream originalImage, String newImage, double factor) throws Exception {
	Image img = ImageIO.read(originalImage);
	loadImage(img);
	int iw = img.getWidth(this);
	int ih = img.getHeight(this);

	//Reduce the image
	int w = (int) (iw * factor);
	Image i2 = img.getScaledInstance(w, -1, 0);
	loadImage(i2);

	this.processaImagem(i2, newImage);

}

//Use JPEGImageEncoder to write the BufferedImage to a file
try {
OutputStream os = new FileOutputStream(newImage);

		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);

		JPEGEncodeParam param = JPEGCodec.getDefaultJPEGEncodeParam(bi);
		param.setQuality(1, false); // use maximum quality

		encoder.encode(bi);
	} catch (IOException ioe) {
		ioe.printStackTrace();
	}
}

/**
 * Cause the image to be loaded into the Image object
 */
private void loadImage(Image img) {
	try {
		MediaTracker tracker = new MediaTracker(this);
		tracker.addImage(img, 0);
		tracker.waitForID(0);
	} catch (Exception e) {
	}
}

Será q essa classe nao eh eficiente para arquivos em batch ?? Qual seria a solucao mais eficiente ? Muito obrigado

De uma olhada nessa classe:

https://jforum.dev.java.net/source/browse/jforum/src/net/jforum/util/image/ImageUtils.java?rev=1.11&content-type=text/vnd.viewcvs-markup

Rafael