看下面的代码.
CommonUtil包含读文件的写文件的方法:
package demo2;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class CommonUtil {
public static void readFile() throws Exception{
InputStream is = new FileInputStream("D://abc.txt");
BufferedInputStream br = new BufferedInputStream(is);
byte b[] = new byte[26];
br.read(b);
System.out.println(new String(b));
br.close();
is.close();
}
public static void writeFile() throws Exception{
OutputStream is = new FileOutputStream(new File("D://abc.txt"));
BufferedOutputStream bo = new BufferedOutputStream(is);
String s = "abcdefghijklmnopqrstuvwxyz";
bo.write(s.getBytes());
bo.close();
is.close();
}
/*public static void main(String[] args) throws Exception{
writeFile();
readFile();
}*/
}
WriteThread是一个写的线程:
package demo2;
public class WriteThread extends Thread{
public void run(){
while(true){
try {
CommonUtil.writeFile();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
readThread是一个读的线程:
package demo2;
public class ReadThread extends Thread{
public void run(){
while(true){
try {
CommonUtil.readFile();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
测试代码:
package demo2;
public class Test {
public static void main(String[] args) {
WriteThread w = new WriteThread();
ReadThread r = new ReadThread();
w.start();
r.start();
}
}
从结果来看,似乎一边写,一边读,没什么问题啊,每次读到的都是完整的数据,可是我听别人老是说读写要同步、加锁之类的,不然读的内容是不完整之类的。可是这里未发生这种不一致情况,难道代码写的不对,求大家解惑,是怎么回事啊?
相关推荐
C++的`fstream`库提供了`ifstream`(用于读取文件)、`ofstream`(用于写入文件)和`fstream`(同时进行读写)类,这些类允许我们与磁盘上的文件进行交互。例如,我们可以使用`open()`函数打开一个文件,`read()`和`...
在Linux内核中,有几种经典的数据同步方法,主要包括互斥锁(Mutex)、读写锁(Read-Write Lock)、顺序锁(Seqlock)、信号量(Semaphore)、自旋锁(Spinlock)和RCU(Read-Copy Update)等。 1. 互斥锁(Mutex)...
本主题将深入探讨如何使用`CMutex`类来实现线程同步,该类是Microsoft MFC(Microsoft Foundation Classes)库中的一个组件,专门用于处理线程间的互斥访问。 首先,线程同步是为了防止多个线程同时访问同一资源,...
Unix VFS是操作系统内核中的一个抽象层,它屏蔽了底层文件系统的差异,使得用户和应用程序无需关心具体文件存储在哪个设备或者何种类型的文件系统上。VFS的核心在于其挂载(mount)机制,允许用户将不同的文件系统...
虽然没有给出具体的代码,但从文件路径可以推测出这些类可能涉及到了资源同步相关的逻辑。例如,`NSReleaseLib`可能是用于处理同步逻辑的库,而`PageInfoBean`则可能包含了需要被同步的页面信息等数据。 #### 5. ...
1. **文件的创建**:当用户需要保存数据时,操作系统会为该数据分配一个唯一的标识(文件名),并为之在磁盘上分配存储空间。在这个实验中,我们需要理解如何使用C++的文件流库(fstream)来创建一个新的文件。 2. ...
Linux的EXT2(第二扩展文件系统)是早期广泛使用的文件系统之一,特别是在嵌入式系统和Linux服务器上。EXT2的C语言实现是一项技术性极强的任务,涉及到对操作系统底层机制的理解,包括文件系统的结构、inode、超级块...
- **解决方案**:一种常见做法是在并行文件系统之上增加一个可以捕获并行程序数据访问模式的层——并行I/O库,以优化I/O请求的处理。 #### 三、并行文件系统的分类 - **商业用途的并行文件系统**:专为商业环境...
AQS 是队列同步器 AbstractQueuedSynchronizer 的简写,用来构建锁或者其他同步的基础。AQS 使用一个 int 成员变量来表示同步状态,通过内置 FIFO 队列完成竞争资源的线程排队工作。AQS 提供方法主要有三类:独占式...
6. **队列同步(Queue Synchronization)**:通过在同一线程队列上提交任务实现同步,例如,主线程上的任务会按顺序执行,无需额外的同步措施。 了解了这些基础知识后,开发者可以根据实际需求选择合适的线程管理...
`synchronized`关键字是最常用的同步机制之一。它可以用来修饰方法或者代码块,确保同一时刻只有一个线程能够访问被修饰的资源。 - **修饰方法**:当`synchronized`用于修饰一个实例方法时,该锁的范围是整个对象;...
- **同步机制**:依赖于锁管理器来协调多个客户端对同一文件的访问。 - **缓存和复制**:客户端可以缓存文件副本以减少网络通信。 - **容错性**:通过重试机制和冗余服务器提高系统的可靠性。 - **安全性**:...
或者使用并发集合来替代传统的集合类,这样可以在多线程环境下实现更好的性能。 在实际操作中,Java同步线程模型的应用需要特别注意线程的创建和管理。合理设置系统进程数目、控制上下文切换次数以及线程的合理分工...
整合步骤包括配置pom文件引入Redis依赖、配置application.yml文件指定Redis服务器地址及端口、通过RedisAutoConfiguration自动配置类进行配置,并利用RedisTemplate或StringRedisTemplate封装Redis操作。 整合Redis...
- **更高级的同步原语**:现代多处理器系统采用了更复杂的同步原语,如信号量、读写锁等,以实现更精细的控制和更高的效率。 - **锁管理和死锁避免**:锁的管理、锁粒度的选择以及如何避免死锁等问题成为设计多...
如果其中包含源代码或者文档,我们可以深入研究其使用了哪种锁机制,是如何实现线程同步的,以及在处理并发问题时有哪些独特之处。同时,如果涉及到其他编程概念或技术,例如死锁预防、线程池管理、异步编程等,都是...
在源码层面,我们可能会看到诸如C++的iostream库或者Java的java.io包,它们提供了各种IO流类用于处理文件、网络等IO操作。例如,`std::ifstream`用于读取文件,`std::ofstream`用于写入文件,而在Java中,`...