我需要读取两个文件进行比对,并把比对的结果输入到jsp页面,但文件太大,jboss总是超时,希望那位高手能给个多线程的例子,帮忙解决一下,很急!!!!!
解决方案 »
- img标签的值 用jsp:getProperty 怎么不显示
- 判断是手机访问还是PC访问
- TCP/IP是启用的。 我用hibernate创建数据库连接时,它报错:到主机 的TCP/IP连接失败。
- hibernate 问题
- 想问一下Spring里面配制文件的内容!
- 请问我在weblogic中发布一个server,所指向的jdk是bea\jdk141_05,请问这个自带的是j2eesdk还是j2sesdk?如果用j2eesdk,是不是覆盖了j2sesd
- sax简单问题,各位大虾帮帮我!
- 急问高手!EJB,送分问题!
- 关于EJB开发问题
- hibernate本地sq如何调函数,如何传入值和接收返回值?
- 数组
- struts2文件上传时读不到资源文件里东东
2) 读的数据不要放到文件中,而是直接喂给比较线程。如果比较线程发现数据不同,数据库读线程终止读数据,比较线程将结果返回给用户。
如果数据量太大,就算用线程也解决不了你的问题。你需要重新设计你的程序。public class DataReadThread extends Thread {
private volatile stop_ = false;
private String fileName_;
private LinkedBlockingQueue< byte[] > blocks_ = new LinkedBlockingQueue< byte[] >();
private ...;
public DataReadThread( ... ) { //your arguments
}
public void stop() {
stop_ = stop;
}
public LinkedBlockingQueue< byte[] > getBlocks() {
return blocks_;
}
public void run() {
try {
connectToDatabase();
while( !stop_ ) {
byte[] buf = readDataFromDatabase();
if( buf == null ) {
blocks_.put( new byte[0] );
break;
}
blocks_.put( buf );
}
closeConnection();
}catch( Exception ex ) {
}
}
private void connectToDatabase() {
//connect to the database
}
private byte[] readDataFromDatabase() {
//read data from the database
}
private void closeConnection() {
//close the connection
}
}public class CompareThread extends Thread {
private DataReadThread dataReadThread1_;
private DataReadThread dataReadThread2_;
public CompareThread( DataReadThread dataReadThread1, DataReadThread dataReadThread2 ) {
blockSize_ = blockSize;
dataReadThread1_ = dataReadThread1;
dataReadThread2_ = dataReadThread2;
}
public void run() {
try {
LinkedBlockingQueue< byte[] > blocks1 = dataReadThread1_.getBlocks();
LinkedBlockingQueue< byte[] > blocks2 = dataReadThread2_.getBlocks();
boolean equal = true;
while( equal ) {
byte[] block_1 = blocks1.take();
byte[] block_2 = blocks2.take();
if( !Arrays.equals( block_1, block_2 ) ) {
equal = false;
break;
}
if( block_1.length == 0 ) {
break;
}
}
dataReadThread1_.stop();
dataReadThread2_.stop();
}catch( Exception ex ) {
}
}
}public class Main {
public static void main(String[] args ) {
DataReadThread dataReadThread1 = new DataReadThread(...);
DataReadThread dataReadThread2 = new DataReadThread(...);
CompareThread compThread = new CompareThread( dataReadThread1, dataReadThread2 );
fileReadThread1.start();
fileReadThread2.start();
compThread.start();
}
}
你可以在SQL中进行ORDER BY,然后用rownum之类的关键字,一次只读1000条或者更少的记录。
每比较完一次记录以后,将结果flush到浏览器。然后进行下一轮比较。