看下面的代码.
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();
}
}
从结果来看,似乎一边写,一边读,没什么问题啊,每次读到的都是完整的数据,可是我听别人老是说读写要同步、加锁之类的,不然读的内容是不完整之类的。可是这里未发生这种不一致情况,难道代码写的不对,求大家解惑,是怎么回事啊?
相关推荐
在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. ...
- **解决方案**:一种常见做法是在并行文件系统之上增加一个可以捕获并行程序数据访问模式的层——并行I/O库,以优化I/O请求的处理。 #### 三、并行文件系统的分类 - **商业用途的并行文件系统**:专为商业环境...
AQS 是队列同步器 AbstractQueuedSynchronizer 的简写,用来构建锁或者其他同步的基础。AQS 使用一个 int 成员变量来表示同步状态,通过内置 FIFO 队列完成竞争资源的线程排队工作。AQS 提供方法主要有三类:独占式...
6. **队列同步(Queue Synchronization)**:通过在同一线程队列上提交任务实现同步,例如,主线程上的任务会按顺序执行,无需额外的同步措施。 了解了这些基础知识后,开发者可以根据实际需求选择合适的线程管理...
`synchronized`关键字是最常用的同步机制之一。它可以用来修饰方法或者代码块,确保同一时刻只有一个线程能够访问被修饰的资源。 - **修饰方法**:当`synchronized`用于修饰一个实例方法时,该锁的范围是整个对象;...
整合步骤包括配置pom文件引入Redis依赖、配置application.yml文件指定Redis服务器地址及端口、通过RedisAutoConfiguration自动配置类进行配置,并利用RedisTemplate或StringRedisTemplate封装Redis操作。 整合Redis...
- **更高级的同步原语**:现代多处理器系统采用了更复杂的同步原语,如信号量、读写锁等,以实现更精细的控制和更高的效率。 - **锁管理和死锁避免**:锁的管理、锁粒度的选择以及如何避免死锁等问题成为设计多...
如果其中包含源代码或者文档,我们可以深入研究其使用了哪种锁机制,是如何实现线程同步的,以及在处理并发问题时有哪些独特之处。同时,如果涉及到其他编程概念或技术,例如死锁预防、线程池管理、异步编程等,都是...
在源码层面,我们可能会看到诸如C++的iostream库或者Java的java.io包,它们提供了各种IO流类用于处理文件、网络等IO操作。例如,`std::ifstream`用于读取文件,`std::ofstream`用于写入文件,而在Java中,`...
Mini-UFs可能采用了锁或者其他同步机制来确保数据的一致性。 10. **测试与调试**: 为了确保功能的完善,Mini-UFs需要进行充分的测试,包括单元测试、集成测试和性能测试。同时,调试工具和日志系统也是必不可少的...
综上所述,"多线程,多接收模式串口类 LsComm 之二_串口多线程_串口_多接收模式串口类LsComm_多线程.zip"这个文件很可能是针对多线程串口通信的示例代码或文档,涵盖了多线程编程和串口通信的实践知识,对于理解和...