- 浏览: 1328091 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (896)
- spring4 (14)
- hibernate3 (26)
- spring2 (35)
- struts2 (55)
- struts1 (15)
- 设计模式 (15)
- java (172)
- mybatis3 (11)
- sql (17)
- mysql (13)
- jbpm (10)
- J2EE (45)
- tools (29)
- js (83)
- 数据结构 (13)
- Html (26)
- web (22)
- flex (33)
- Oracle (57)
- linux (49)
- 算法 (6)
- 其它 (12)
- easyui (1)
- bootstrap (13)
- xml (2)
- tomcat (1)
- redis (10)
- activemq (2)
- webservice (11)
- maven (2)
- springboot (1)
- ubuntu (1)
- python (14)
- rocketmq (1)
- springcloud (10)
- opencv (1)
最新评论
-
mike_eclipse:
Hashtable是线程不安全的吗?好像是线程安全的吧?
多线程之集合类 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
lodop打印控件 -
xingcxb:
经过测试,假的,依旧会出现中文乱码!!!!store方法里面采 ...
java 读写Properties文件,不会出现中文乱码 -
tiger20111989:
...
Spring注解方式管理事务 -
zw7534313:
...
js 文字上下滚动 无间断循环显示
文件读写线程:
使用synchronized 配合wait/notify,稳定性好,线程数越多越快
package cn.thread.fen.open;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;
public class FileReadThread extends Thread{
private FileInputStream is;
private int bufSize=1024;
private volatile byte[] buf=new byte[1024];
private volatile int len = 0;
public void run() {
try {
synchronized(this) {
while (this.getLen()!=-1) { //读完整个文件,len=-1
if (this.getLen() != 0) {
wait(10);
}
else{
int length = this.getIs().read(this.getBuf(), 0, this.bufSize);
this.setLen(length);
notify();
// System.out.println("----------"+length);
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
finally{
try {
this.getIs().close();
} catch (IOException e) {
e.printStackTrace();
}
String readTime=new Date().toString();
System.out.println("========== readOver Time : "+readTime +" ==========");
}
}
public FileInputStream getIs() {
return is;
}
public void setIs(FileInputStream is) {
this.is = is;
}
public byte[] getBuf() {
return buf;
}
public void setBuf(byte[] buf) {
this.buf = buf;
}
public int getLen() {
return len;
}
public void setLen(int len) {
this.len = len;
}
}
package cn.thread.fen.open;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
public class FileWriteThread extends Thread {
// private volatile byte[] buf=new byte[1024]; //文件读写公用的缓存数据
// private volatile int len = 0;//读取的字符长度,公用
private FileOutputStream os;
private FileReadThread r;
public FileWriteThread(FileReadThread r){
this.r=r;
}
public void run() {
synchronized(this){
while(true){
if(r.getLen()==0){
try {
wait(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else{
// System.out.println("*********"+r.getLen());
if(r.getLen()==-1){ //读线程结束,写线程也结束
try{
this.getOs().close();
} catch (IOException e) {
e.printStackTrace();
}
break;
}
try {
this.getOs().write(r.getBuf(), 0, r.getLen());
// os.flush();
} catch (IOException e) {
e.printStackTrace();
}
r.setLen(0);
notify();
}
}
}
String writeTime=new Date().toString();
System.out.println("========== writeOver Time : "+writeTime +" ==========");
}
public FileOutputStream getOs() {
return os;
}
public void setOs(FileOutputStream os) {
this.os = os;
}
}
package cn.thread.fen.open;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Date;
public class TestThread {
/**
*
*/
public static void main(String[] args) throws Exception {
// String startTime=new Date().toString();
// System.out.println("========== startTime : "+startTime +" ==========");
//
// File file = new File("E:\\Log\\linkType.txt");
// int i=(int)(Math.random()*100);
// File of = new File("E:\\Log\\"+i+".txt");
//
// FileReadThread r = new FileReadThread();
// r.setIs(new FileInputStream(file));
// FileWriteThread w = new FileWriteThread(r);
// w.setOs(new FileOutputStream(of));
//
// r.start(); //起动读线程
// w.start(); //起动写线程
test();
}
private static void test(){
String startTime=new Date().toString();
System.out.println("========== startTime : "+startTime +" ==========");
File file = new File("E:\\Log\\bc2.txt");
int i=(int)(Math.random()*100);
File of = new File("E:\\Log\\"+i+".txt");
FileReadThread r = new FileReadThread();
try {
r.setIs(new FileInputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
FileWriteThread w = new FileWriteThread(r);
try {
w.setOs(new FileOutputStream(of));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
r.start(); //起动读线程
w.start(); //起动写线程
}
}
发表评论
-
服务端推送multipart/x-mixed-replace
2023-12-07 15:26 422往网页分批推送数据:boundary=END,总头--> ... -
使用httpclient提交post请求
2020-08-22 08:35 485import org.apache.http.HttpEnt ... -
Groovy超强的Java动态计算能力
2020-06-25 09:03 698//Groovy超强的Java动态计算能力 groovy-2. ... -
bsh(BeanShell)动态执行java代码
2020-06-25 07:59 997import java.util.Date; /** * B ... -
延时任务处理订单超时方案
2020-05-23 16:05 1019JDK的延迟队列 方案是利用JDK自带的DelayQueue ... -
HttpsURLConnection
2020-04-29 10:51 869import java.net.URL; import jav ... -
Log4j的ConversionPattern参数的格式含义
2020-04-22 14:23 514Log4j的ConversionPattern参数的格式含义 ... -
thread 的join
2020-04-16 18:02 426java里面也有这个方法,Java Thread中, join ... -
GZIPOutputStream压缩文件
2020-04-16 17:52 797import java.io.BufferedReader; ... -
软引用SoftReference的使用
2020-04-16 15:48 589软引用SoftReference的使用 SoftRefere ... -
Fastjson
2020-04-15 14:53 413import java.util.ArrayList; imp ... -
6位随机数
2020-04-14 09:47 817import org.apache.commons.lang. ... -
Java加密和数字签名
2020-04-14 09:38 427Java加密和数字签名 消息摘要 这是一种与消息认证码结合使 ... -
DES加密、解密
2020-04-02 16:42 441import java.security.SecureRand ... -
Java利用 AES/ECB/PKCS5Padding 算法加解密
2020-04-02 11:19 1072对称加密、解密 import javax.crypto.Ci ... -
springboot中使用springmvc的拦截器-HandlerInterceptorAdapter
2018-12-13 16:04 1395springboot中使用springmvc的拦截器-Hand ... -
aspectj连接点
2018-12-13 15:55 608切点指示符 切点指示符 ... -
spring之AspectJ面向切面编程
2018-12-13 14:15 915spring之AspectJ面向切面编程 面向切面编程,实现 ... -
设计模式之策略模式
2018-05-30 21:17 564public class Person { priva ... -
使用反射将对象转Map
2018-05-27 17:33 734//使用反射将对象转Map<String, St ...
相关推荐
简单的利用互斥变量、原子操作等技术实现多线程读写文件时的互斥,从而确保文件在操作过程中不会被破坏。例子并没有使用很多复杂的逻辑。适合刚接触多线程编程的新手学习理解多线程程序的编程思路。
本教程聚焦于如何利用多线程实现串口(Serial Port)读写数据及文件的读写操作,这对于理解和开发高效通信系统至关重要。 首先,我们要理解什么是串口通信。串口通信是一种基于串行数据传输的通信方式,它通过一条...
在Python编程中,多线程同步对于文件读写控制至关重要,因为如果不加以控制,多个线程同时访问同一文件可能会导致数据不一致或者错误。这里我们将深入探讨如何在Python中使用多线程同步来确保文件读写的安全性。 ...
在读取文件时,多线程可能带来性能提升,因为读操作通常是非阻塞的,多个线程可以并行读取文件的不同部分。然而,写操作通常需要原子性,即不能被中断,因此可能需要使用锁来保护。 此外,还可以使用信号量...
在IT领域,多线程文件读写测试是一个重要的性能优化技术,尤其对于处理大量数据的程序来说至关重要。本文将深入探讨这个主题,并基于提供的文件名列表解析可能的项目结构。 标题"多线程文件读写测试"暗示了这是一个...
在C#编程中,多线程技术常用于提高应用程序的执行效率,特别是在处理数据库操作时。SQLite是一款轻量级、嵌入式的关系型数据库,它广泛应用于桌面应用、移动设备和Web开发。当多线程环境对SQLite进行读写操作时,...
读文件费时间,所以开一个线程读文件。 抽象后的类似demo: 假定读文件需要0.6秒,图像处理(用存文件代替)需要0.5秒,各执行100次。 类和函数 读取文件函数: 一,List增加本序号(0开始)。 二,随机生成5000...
3.读取的文件使用多线程处理,不影响显示界面正常操作; 4.读取过来的文件如有修改,需要保存修改部分; 5.读、写文件需要显示处理进度; 6.增加一个列表,用于展示文本文件的类型、大小、行数等。 一、功能列表 1....
在Java编程中,多线程技术是提升程序执行效率的关键之一,特别是在进行文件读写操作时。本主题将深入探讨如何使用多线程来优化文件的读取和写入过程,以及需要注意的相关问题。 首先,我们需要理解单线程与多线程在...
标题中的"多线程文件读写ThreadREADWrite"指的是在同一时间内,通过两个或更多的线程分别进行文件的读取和写入操作。这种技术可以提升应用程序的性能,尤其是在处理大量数据时。然而,多线程同时读写同一文件会引发...
在这个“一个多线程同步读写的小程序”中,我们看到开发者尝试通过创建读线程和写线程来同时进行数据的读取和写入,以优化程序的执行流程。 首先,让我们深入理解多线程的概念。线程是操作系统分配处理器时间的基本...
### 操作系统中的多线程创建与读者写者问题解析 #### 多线程概念介绍 在计算机科学中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以拥有多个线程,而每个...
本文将深入探讨如何在Delphi中利用多线程技术来实现日志文件的高效读写与管理。 首先,了解多线程的概念。在单线程环境下,所有的操作都是顺序执行的,如果在处理日志时阻塞了主线程,可能会导致用户界面的卡顿。而...
在“易语言多线程读取大文本文件”这个主题中,核心概念是多线程和文件I/O操作。多线程允许程序同时执行多个独立的任务,提高效率,尤其在处理大型文件时,可以将任务分割成多个部分,由不同的线程并行处理。这可以...
本文通过三行代码展示了如何使用读写锁解决多线程并发写入文件的冲突。 读写锁的核心在于,它允许多个线程同时读取资源,但只允许一个线程写入资源。这样,当多个线程尝试写入时,只有一个线程能够获得写锁,其他...
在IT领域,尤其是在地理信息系统(GIS)开发中,"基于多线程和gdal类库的影像读写"是一个关键的技术点。GDAL(Geospatial Data Abstraction Library)是一个强大的开源库,用于处理多种遥感和地图数据格式,包括TIFF...
在 Delphi 开发环境中,多线程技术是提高应用程序性能和响应能力的重要手段。尤其是在处理大量数据读写操作时,多线程可以显著提升效率,避免阻塞主线程,从而提供更好的用户体验。以下是对"Delphi 多线程读写测试...
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据
在IT领域,多线程是并发处理任务的关键技术,尤其在读取大文件时,能够显著提高程序的执行效率。本文将围绕“多线程读取文件”这一主题,结合给定的标签“源码”和“工具”,深入探讨如何在Java等编程语言中实现这一...
在编程领域,多线程是实现并发执行任务的关键技术,特别是在处理大文件读写时,可以显著提升程序的效率。本示例中的“多线程读写问题循环buffer”着重探讨了如何在多个线程之间安全地共享一个循环缓冲区,以实现高效...