0 0

如何加读写锁0

1.WriteMethod是个写数据到文件的方法
package test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class WriteMethod {
	
	public static void createCsvFile(String filePath,String data){
		FileOutputStream fos = null;
		OutputStreamWriter out = null;
		try {
			fos = new FileOutputStream(filePath);
			out = new OutputStreamWriter(fos,"UTF-8");
			out.write(data);
		} catch (FileNotFoundException e) {
			e.getMessage();
		} catch (UnsupportedEncodingException e) {
			e.getMessage();
		} catch (IOException e) {
			e.getMessage();
		} finally{
			try {
				if(out!=null){
					out.close();
				}
				if(fos!=null){
					fos.close();
				}
			} catch (IOException e) {
				e.getMessage();
			}
		}
	}
}

2.ReadFile是一个读文件的方法
package test;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.io.UnsupportedEncodingException;

public class ReadFile{
	
	public static void readCsvFile(String filePath){
		Reader is = null;
		BufferedReader br = null;
		try {
			is = new FileReader(filePath);
			br = new BufferedReader(is);
			System.out.println(br.readLine());
		} catch (FileNotFoundException e) {
			e.getMessage();
		} catch (UnsupportedEncodingException e) {
			e.getMessage();
		} catch (IOException e) {
			e.getMessage();
		} finally{
			try {
				if(br!=null){
					br.close();
				}
				if(is!=null){
					is.close();
				}
			} catch (IOException e) {
				e.getMessage();
			}
		}
	}
}

3.TestWriteThread是一个写的线程类,不停的在调WriteMethod这个类
package test;

public class TestWriteThread extends Thread{
	private static boolean flag = true;
	public void run(){
		while(flag){
			dome();
		}
	}
	
	public void dome(){
		write();
	}
	
	public void write(){
		WriteMethod.createCsvFile("D:\\abc.txt","a");
	}
}

4.Test起一个写的线程,不停的在写
package test;

public class Test {
	public static void main(String[] args) throws Exception{
		TestWriteThread tw = new TestWriteThread();
		tw.start();
	}
}

5.Test2不停的再读,注意:但是它不是线程类!!!
package test;

public class Test2 {
	public static void main(String[] args) {
		while(true){
			ReadFile.readCsvFile("D:\\abc.txt");
		}
	}
}

现在当先运行第四步再运行第五步,即不停的在写时也不停的在读,就会出现读到null值,那么该如何加锁,从而不出现null???
2013年8月06日 22:16

3个答案 按时间排序 按投票排序

0 0

有点类似unix里面 tail命令的方式

改变一下代码读文件的方式就可以了,不用加锁


大概的代码形如:

 boolean running=true;
while (running) {
			try {
				line = reader.readLine();
				if (line != null) {
					if (showLineNo) {
						lineNo++;
						System.out.printf("%5d%s%s", lineNo, ": ", line);
						System.out.println();
					} else
						System.out.println(line);
				}
				Thread.sleep(50);
			} catch (IOException e) {
				handleIOException();
			} catch (InterruptedException e) {
				stop();
			}
		}


这是我自己以前实现tail时编写的代码的片段

2013年8月07日 15:35
0 0

在你写文件的时候采用的是先擦除文件中的内容,然后写入,在这个过程中读取的时候就是空,你可以采用不擦除直接往后添加。用这个构造方法 FileOutputStream(File file,                        boolean append)

2013年8月07日 11:02
0 0

你这个不是锁的问题。
因为是两个“进程”,而不是“线程”。

最简单的做法就是read时检查,如果是null,等待一定间隔后再次尝试读取。

如果是为了学习同步的话,还是查“java 进程 通信”吧。
不过机制会复杂很多,单单个文件读写,应该不会用到那么大的刀。

2013年8月07日 08:53

相关推荐

    易语言线程安全之原子锁与读写锁

    本文将深入探讨易语言中的原子锁与读写锁。 原子操作是一种不可分割的操作,它在执行过程中不会被其他线程中断。在易语言中,原子操作常用于更新计数器、标志位等简单数据类型的场景,避免了线程间的竞态条件。例如...

    读写锁_读写锁_

    读写锁是多线程编程中的一个重要概念,用于提高并发访问数据时的效率。在并发环境中,如果多个线程同时读取数据,通常不会产生冲突,而写入数据时则可能引发问题。读写锁正是为了解决这个问题,它允许多个读取线程...

    mysql读写锁演示案例

    ### MySQL读写锁知识点详解 #### 一、读写锁概念与特征 在数据库系统中,锁机制是一种非常重要的并发控制手段,它主要用于确保多用户同时访问数据时的一致性和完整性。MySQL作为一款广泛使用的开源关系型数据库...

    C++的线程读写锁(windows实现)

    * 读写锁 * 读-读并发,读-写互斥,写-写互斥 * Windows NT下可以使用 * 基于CRITICAL_SECTION实现,简单高效,只支持在进程内使用,不支持进程间使用 * 支持限制最大并发读者数 * 写操作优先(即当前有线程...

    Java编程读写锁详解

    结论是读写锁能够 guarantee 读取数据的严格实时性,如果不需要这种严格实时性,那么不需要加读写锁。 读写锁的 Demo 实现可以是设计一个模拟队列,拥有一个数据成员变量用于存储数据和存取两种操作。例如: ```...

    net并发数据结构读写锁

    【并发数据结构与读写锁】在多线程编程中,确保线程安全至关重要,而读写锁(ReaderWriterLock)是一种高效的线程同步机制,特别适用于读操作频繁而写操作较少的情况。读写锁允许多个线程同时读取资源,但只允许一个...

    Python读写锁实现实现代码解析

    Python 提供的多线程模型中并没有提供读写锁,读写锁相对于单纯的互斥锁,适用性更高,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。 通俗点说就是当没有写锁时,就可以加读锁且任意...

    用Python实现读写锁的示例代码

    Python 提供的多线程模型中并没有提供读写锁,读写锁相对于单纯的互斥锁,适用性更高,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。 通俗点说就是当没有写锁时,就可以加读锁且任意...

    ID卡读写软件与资料(含读写协议)

    ID卡读写软件与资料是涉及智能卡技术领域的一个重要主题,尤其是对于ID卡的管理和应用。ID卡,全称为身份识别卡,通常用于身份验证、门禁控制、考勤系统等多种场合。在这个主题中,我们主要关注的是如何通过特定的...

    postgresql mvcc技术内幕

    多版本并发控制技术解决了传统数据库系统中通过加读写锁来确保数据一致性的问题。传统方法会导致写操作在进行期间阻塞读操作,读操作也会阻塞写操作,从而降低了系统的并发性能。而MVCC通过保留数据的旧版本,允许读...

    飞天诚信Rockey1加密锁易语言读写工具源码.zip

    飞天诚信Rockey1加密锁易语言读写工具源码.zip

    易语言-易语言线程安全之原子锁与读写锁

    1. **创建读写锁**:首先,我们需要创建一个读写锁对象,这可以通过调用“创建读写锁”命令完成。这个对象将用于后续的读写操作。 2. **请求读锁**:当一个线程需要读取共享资源时,调用“请求读锁”命令。如果当前...

    智能锁写锁工具全国

    在IT行业中,智能锁是一种利用现代技术,如物联网、生物识别和无线通信,来提供安全性和便利性的设备。"智能锁写锁工具全国"可能是针对这类设备开发的一款软件工具,旨在帮助用户管理和控制智能锁的功能。这样的工具...

    rockey2 读写狗工具

    标题中的“rockey2 读写狗工具”指的是飞天诚信公司生产的Rockey2加密锁,也被称为USB保护设备或硬件密钥。这种设备主要用于软件授权管理,通过插入USB接口来验证用户是否有权运行特定的软件。读写狗工具则是用于与...

    t5557读写软件

    - **常规读写操作**:支持对卡片中未加保护的数据块进行读写操作。 - **保护性读写操作**:对设置了保护位的数据块进行读写操作时,需先解锁才能进行。 #### 六、总结 T5557读写软件为用户提供了一个方便快捷的方式...

    springboot+dubbo分布式架构,提供分布式缓存、分布式锁、分布式Session、读写分离

    数据同步:基于redis的分布式锁。 Web安全:实现XSS过滤和CSR过滤。 多系统交互:Dubbo,ActiveMQ多系统交互。 前后端分离:前端使用ajax访问后端的rest服务,后端返回json格式数据。页面用nginx反向代理访问。 支付...

    C++Builder 拖放文件,flash加密,读写控制

    4. 在读写操作前,调用WaitForSingleObject等待获取锁。 5. 执行读写操作。 6. 完成操作后,调用ReleaseMutex或ReleaseSemaphore释放锁。 7. 最后,使用UnmapViewOfFile取消映射内存,并用CloseHandle关闭共享内存和...

    如何使用C#读写锁ReaderWriterLockSlim

    现在,我们详细讨论C#中的读写锁ReaderWriterLockSlim,这是一个强大的并发控制工具,特别适合在多线程环境中处理共享数据。ReaderWriterLockSlim允许多个线程同时读取数据,但一次只允许一个线程写入,从而提高了...

    folly源码分析

    RWSpinlock.h 中的 RWSpinlock 是使用自旋方式进行临界区资源等待的读写锁,它与 pthread_rwlock_t 有三个比较重要的区别: 1. 使用原子操作处理读者计数或写者状态,避免 pthread_rwlock_t 无论读写的加锁解锁都要...

    行业文档-设计装置-锁式接触式IC卡读写器.zip

    《锁式接触式IC卡读写器》是一个深入探讨IC卡技术及其应用的行业文档,主要聚焦于设计和装置方面。IC卡,全称为集成电路卡,是电子数据存储和处理的一种载体,广泛应用于金融、交通、医疗、身份认证等多个领域。锁式...

Global site tag (gtag.js) - Google Analytics