for(.......) {
new Thread(new Runnable(){
@Override
public void run() {
//读取文件
ReadUtil.read();
}
}).start();
}
//-----------读取文件的操作------------
public synchronized static read() {
File file=new File("F://info/订单信息.xls");
Workbook wb=null;
try {
//传入的是文件,获取工作薄
wb = Workbook.getWorkbook(file);
if(wb!=null){
//do .......
}
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
wb.close();
}
}
如果这个方法不加“同步”的话,就会报错。空指针异常是wb.close()这块。
我不理解的是我启动了多个线程,应该就有多个实例ReadUtils之间的读取文件应该互不干扰才对,为什么一个线程会把另一个线程的IO流给关了。。。
后台错误信息如下:
Exception in thread "Thread-1" java.lang.NullPointerException
at com.excle.jxl4mysql.ReadUtil.read(ReadUtil.java:122)
at com.excle.jxl4mysql.ReadThread$1.run(ReadThread.java:36)
at java.lang.Thread.run(Thread.java:619)
Exception in thread "Thread-2" java.lang.NullPointerException
at com.excle.jxl4mysql.ReadUtil.read(ReadUtil.java:122)
at com.excle.jxl4mysql.ReadThread$1.run(ReadThread.java:36)
at java.lang.Thread.run(Thread.java:619)
Exception in thread "Thread-5" java.lang.NullPointerException
at com.excle.jxl4mysql.ReadUtil.read(ReadUtil.java:122)
at com.excle.jxl4mysql.ReadThread$1.run(ReadThread.java:36)
at java.lang.Thread.run(Thread.java:619)
Exception in thread "Thread-8" java.lang.NullPointerException
at com.excle.jxl4mysql.ReadUtil.read(ReadUtil.java:122)
at com.excle.jxl4mysql.ReadThread$1.run(ReadThread.java:36)
at java.lang.Thread.run(Thread.java:619)
Exception in thread "Thread-7" java.lang.OutOfMemoryError: Java heap space
Exception in thread "Thread-6" java.lang.OutOfMemoryError: Java heap space
Exception in thread "Thread-3" java.lang.OutOfMemoryError: Java heap space
相关推荐
本文将围绕“多线程读取文件”这一主题,结合给定的标签“源码”和“工具”,深入探讨如何在Java等编程语言中实现这一功能,并提供一些实用的工具和技巧。 首先,我们了解为什么需要多线程读取文件。当处理大型文件...
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据
在“易语言多线程读取大文本文件”这个主题中,核心概念是多线程和文件I/O操作。多线程允许程序同时执行多个独立的任务,提高效率,尤其在处理大型文件时,可以将任务分割成多个部分,由不同的线程并行处理。这可以...
3.读取的文件使用多线程处理,不影响显示界面正常操作; 4.读取过来的文件如有修改,需要保存修改部分; 5.读、写文件需要显示处理进度; 6.增加一个列表,用于展示文本文件的类型、大小、行数等。 一、功能列表 1....
本源码示例是关于如何在易语言中实现多线程读取大文本文件,这对于处理大量数据或长时间运行的任务尤其有用。以下将详细介绍这一技术及其应用。 首先,理解多线程的概念至关重要。在单线程环境中,程序按照顺序执行...
VC++环境下编写的一个多线程文件读写操作的实例。简单的利用互斥变量、原子操作等技术实现多线程读写文件时的互斥,从而确保文件在操作过程中不会被破坏。例子并没有使用很多复杂的逻辑。适合刚接触多线程编程的新手...
在Python编程中,多线程同步对于文件读写控制至关重要,因为如果不加以控制,多个线程同时访问同一文件可能会导致数据不一致或者错误。这里我们将深入探讨如何在Python中使用多线程同步来确保文件读写的安全性。 ...
Qt Creator 多线程读取文件到程序显示 利用QT Creator多任务读取一个文档到程序里 为了防止直接读取文件里的内容太大而发生卡顿,于是多线程读取将更高效的解决这个问题。 效果图如下: 其中pro文件无需改动,...
在读取文件时,多线程可能带来性能提升,因为读操作通常是非阻塞的,多个线程可以并行读取文件的不同部分。然而,写操作通常需要原子性,即不能被中断,因此可能需要使用锁来保护。 此外,还可以使用信号量...
本文将详细探讨多线程读取大文件的原理、实现方法以及其在实际应用中的优势。 首先,理解“多线程”这一概念是至关重要的。线程是操作系统分配CPU资源的基本单位,一个进程可以包含多个线程。在单线程环境下,程序...
本教程聚焦于如何利用多线程实现串口(Serial Port)读写数据及文件的读写操作,这对于理解和开发高效通信系统至关重要。 首先,我们要理解什么是串口通信。串口通信是一种基于串行数据传输的通信方式,它通过一条...
在Java编程中,多线程技术是提升程序执行效率的关键之一,特别是在进行文件读写操作时。本主题将深入探讨如何使用多线程来优化文件的读取和写入过程,以及需要注意的相关问题。 首先,我们需要理解单线程与多线程在...
当多线程环境对SQLite进行读写操作时,可能会引发数据竞争和并发问题,因此必须采取适当的同步策略来确保数据的一致性和完整性。 标题"**C#多线程读写sqlite**"涉及的主要知识点包括: 1. **多线程编程**:C#中的`...
在IT领域,尤其是在地理信息系统(GIS)开发中,"基于多线程和gdal类库的影像读写"是一个关键的技术点。GDAL(Geospatial Data Abstraction Library)是一个强大的开源库,用于处理多种遥感和地图数据格式,包括TIFF...
C++实现多线程文件复制 在文件复制过程中,多线程技术可以大大提高复制速度。下面将详细介绍C++实现多线程文件复制的知识点。 一、多线程文件复制的基本概念 多线程文件复制是指在文件复制过程中,使用多个线程...
4. **数据处理**:线程读取数据后,可以进行必要的处理,例如解析、过滤或计算。处理的结果将被存储在临时变量或结构中,以备后续使用。 5. **更新界面**:由于线程操作可能会与UI交互,我们需要确保在主线程中更新...
Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...
这个"多线程分别下载文件"的Demo是针对在ListView或GridView控件中实现的一项功能,允许用户选择多个文件进行并行下载,并且每个文件的下载进度可以在对应的列表项中实时更新,提供良好的用户体验。 首先,我们要...
在遍历磁盘文件时,如果使用多线程,我们可以将磁盘的不同区域分配给不同的线程,这样就能并行地读取和处理文件,从而显著提高遍历速度。 实现多线程遍历磁盘文件,我们需要以下几个关键步骤: 1. **创建线程池**...
本项目"qt多线程高效下载文件"是基于Qt实现的一个实用工具,它利用多线程技术来提高文件下载的效率,特别是对于大文件或者需要同时下载多个文件的场景,这种多线程策略显得尤为重要。 在HTTP协议方面,它是互联网上...