我想问下,在生成报表的时候,要考虑线程并发的问题,不能单纯的去生成EXCEL然后读,那我应该怎么解决呀 我想问下,在生成报表的时候,要考虑线程并发的问题,不能单纯的去生成EXCEL然后读,那我应该怎么解决呀 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 具体的类你没给出,我说下我的想法吧单独使用一个线程来打印报表,在进行打印的方法里添加一个synchronized同步块,同步块里面是你生产报表的处理在进入同步块前先判断一下是否有在进行报表生成(可用if语句判断),若有则调用wait(),否则正常进入同步块,打印结束后调用notify()通知等待的线程可以进入同步快。大概的流程就是这样。希望我将清楚了—_— 多线程同时打印?既然是多线程的那只要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++; }}不知道是你想要的吗 dom4j添加节点失败 如何取一个类实例的类名,不要包名 怎么样讲vector的数据通过copyInto输出到二维数组 SWING做的界面白屏的问题 已经有一些经验,但不知道怎么样才能最快进入各个方面的实际开发。请大家帮忙介绍书籍和资料和方向 请做过这Struts+Spring+Hibernate视频练习例子的大侠进来看看,谢谢! 俺学java碰到的第一个问题向各位请教 关于 java应用程序关闭打开的ie窗口的问题 关于package打包问题 套接字 [求助]InputStream的available()方法是不是有BUG? 怎么用poi操作excel啊?
单独使用一个线程来打印报表,在进行打印的方法里添加一个synchronized同步块,同步块里面是你生产报表的处理
在进入同步块前先判断一下是否有在进行报表生成(可用if语句判断),若有则调用wait(),否则正常进入同步块,打印结束后调用notify()通知等待的线程可以进入同步快。大概的流程就是这样。
希望我将清楚了—_—
既然是多线程的那只要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++;
}
}
不知道是你想要的吗