先把这个问题说清楚点,就是现在需要上传一个挺大的.zip文件,上传完之后需要复制到别的地方,而且要解压,这样用户就需要等很久,现在是想在用户上传完压缩包后立即响应用户,用户可进行别的业务操作,而压缩包的复制和解压功能则仍在后台运行,不知道我说清楚没有,高手帮忙下,谢谢。给高分!

解决方案 »

  1.   

    你这个不能在一个页面操作,可以使用:弹出窗口,iframe,div展示ajax异步操作
      

  2.   

    一般的业务是单线程的,就是在业务代码里面不用加Thread的东西
    所谓要多线程就是在的你业务处理逻辑代码里面在手动创建一个复制和解压的线程,start起来就不用管了,在start之后响应客户就行了
      

  3.   

    额,感谢大家,问题已经解决了,挺简单的一个问题,以前没用过所以不大会。就是用多线程,把一个解决思路的代码贴出来,大家看看有问题不。
    package test;import java.io.File;public class FileOperate {
    public static void main(String[] args) {
    Long begin = System.currentTimeMillis(); // 上传文件
    UploadFile uploadFile = new UploadFile();
    File file = uploadFile.uploadFileMethod();
    // 给线程传递参数
    CoppyFile coppyFile = new CoppyFile(file);
    UnZipFile unZipFile = new UnZipFile(file);
    // 创建线程
    Thread coppyThread = new Thread(coppyFile);
    Thread unZipThread = new Thread(unZipFile);
    // 启动线程
    coppyThread.start();
    unZipThread.start(); Long end = System.currentTimeMillis();
    // 响应用户请求
    System.out.println("恭喜,文件上传成功,耗时:" + (end - begin) + "毫秒");
    }
    }/**
     * 上传文件类
     * 
     * @author yangjd
     * 
     */
    class UploadFile {
    // 文件上传
    public File uploadFileMethod() {
    File file = new File("filePath");
    System.out.println("文件上传完毕");
    return file;
    }
    }/**
     * 复制文件类
     * 
     * @author yangjd
     * 
     */
    class CoppyFile implements Runnable {
    private File file; public CoppyFile(File file) {
    this.file = file;
    } @Override
    public void run() {
    coppyFileMethod(file);
    } // 文件复制
    public void coppyFileMethod(File file) {
    // 睡眠15秒钟
    try {
    Thread.sleep(15000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println("文件复制完毕");
    }
    }/**
     * 解压文件类
     * 
     * @author yangjd
     * 
     */
    class UnZipFile implements Runnable {
    private File file; public UnZipFile(File file) {
    this.file = file;
    } @Override
    public void run() {
    unZipFileMethod(file); } // 文件解压
    public void unZipFileMethod(File file) {
    // 睡眠10秒钟
    try {
    Thread.sleep(10000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println("文件解压完毕");
    }
    }