我想问下,在生成报表的时候,要考虑线程并发的问题,不能单纯的去生成EXCEL然后读,那我应该怎么解决呀

解决方案 »

  1.   

    具体的类你没给出,我说下我的想法吧
    单独使用一个线程来打印报表,在进行打印的方法里添加一个synchronized同步块,同步块里面是你生产报表的处理
    在进入同步块前先判断一下是否有在进行报表生成(可用if语句判断),若有则调用wait(),否则正常进入同步块,打印结束后调用notify()通知等待的线程可以进入同步快。大概的流程就是这样。
    希望我将清楚了—_—
      

  2.   

     多线程同时打印?
    既然是多线程的那只要synchronized同步打印的方法了,我写了个类似的测试代码,你可以参考下PrintTester类public class PrintTester extends Thread {
    Print print;
    public PrintTester(String name,Print print){
    super(name);
    this.print=print;
    start();
    }
    public void run() {
    while(true){
    print.printThings(this.getName());
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    public static void main(String[] args) {
    Print print =new Print();
                    //生成5个线程打印
    for(int i=0;i<5;i++){
    new PrintTester("thread "+i,print);
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }Print 类
    public class Print {
    private int i=0;
    synchronized public void printThings(String threadName){
    System.out.println(threadName+"is printing i="+i); //打印
    i++;
    }
    }
    不知道是你想要的吗