`

File 线程读写

    博客分类:
  • java
阅读更多

1.Exception in thread "main" java.lang.IllegalMonitorStateException: current thread not owner??

 

public synchronized void setRunning(boolean flag)

 

 public class FileWriterThread extends Thread{
 private FileThread fileThread;
 private int i;
 
 public FileWriterThread(FileThread fileThread){
  this.fileThread=fileThread;
 }
 public void run() {
  while(true){
   i++;
   synchronized (fileThread){
   try {
    //Thread.sleep(100);
    if(!fileThread.isRead()){
     fileThread.wait();
    }
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   System.out.println("write:  ................");
   fileThread.notifyAll();
   fileThread.setRead(false);
   if(i>10){
    break;
   }}}}

 

import java.io.IOException;

public class FileReaderThread extends Thread{
 private FileThread fileThread;
 private int i;
 
 public FileReaderThread(FileThread fileThread){
  this.fileThread=fileThread;
 }

 public void run() {
  while(true){
   i++;
   synchronized (fileThread){
   try {
    //Thread.sleep(100);
    if(fileThread.isRead()){
     fileThread.wait();
    }
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   System.out.println("read:    .................");
   
   fileThread.setRead(true);
   if(i>10){
    break;
   }
   fileThread.notifyAll();}}}

 

public class FileThread {

 private FileInputStream fis;
 private FileOutputStream fos;
 private byte[] buf;
    volatile int len;
 private boolean isRead;
 
 public FileThread(byte[] buf){
  try {
   fis=new FileInputStream("c:\\a.txt");
   fos=new FileOutputStream("c:\\aa.txt");
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  }
  this.buf=buf;
 }
 
 public boolean isRead() {
  return isRead;
 }

 public void setRead(boolean isRead) {
  this.isRead = isRead;
 }}}

 

public class Test {

 public static void main(String[] args) {
  byte[] buf=new byte[1024];

  FileThread ft=new FileThread(buf);
  
  
  FileReaderThread frt=new FileReaderThread(ft);
  frt.start();
  FileWriterThread fwt=new FileWriterThread(ft);
  fwt.start();}}

两个线程同步运行:

read:    .................
write:  ................
read:    .................
write:  ................
read:    .................

 

2.把上面的类写在spring2中:

<bean id="file" class="thread.two.FileThread" scope="singleton"></bean>
<bean id="read" class="thread.two.FileReaderThread">
 <constructor-arg ref="file"></constructor-arg>
</bean>
<bean id="write" class="thread.two.FileWriterThread">
 <constructor-arg ref="file"></constructor-arg>
</bean>

[B@df1832 read---- len:1024
getLen()----- 1024
write: len=1024           //线程没有执行完,没有做循环 ??后来又看出来了,它执行的好慢.

 

private TaskExecutor taskExecutor;

taskExecutor.execute(new MessagePrinterTask("Message" + i));//MessagePrinterTask实现Runnable

 

 

分享到:
评论

相关推荐

    delphi多线程 读写数据

    以下是使用TThread进行多线程读写的步骤: 1. **创建TThread子类**:首先,创建一个新的类,继承自TThread。在这个新类中,定义你需要在线程中执行的代码,即读取或写入数据的逻辑。 ```delphi type ...

    python多线程同步之文件读写控制

    然后,在`file_lock.py`的2.1部分,展示了没有使用任何同步机制(即不加锁)的多线程读写文件。这会导致并发问题,如输出所示,数据被错误地读取和写入,因为多个线程可能同时访问文件,导致数据混乱。 为了修复这...

    file_dw.rar_多线程 读写_文件 系统 dw

    "file_dw.rar_多线程 读写_文件 系统 dw"这个压缩包文件,从标题来看,似乎包含了一个关于如何在操作系统(可能是DW,可能是某个特定的操作系统代号或者开发环境)中使用多线程进行文件读写的示例或代码库。...

    多线程样例一 读写参数文件

    事情起因: 修改配置后,C++函数取读配置xml时,相机缓存满了而引起崩溃。几率发生。 解决思路: 读文件费时间,所以开一个线程读文件。...查看日志:“读取参数”线程约60秒完成,模拟图像处理”线程约50秒完成。

    (源码)基于Java的多线程读写模拟系统.zip

    # 基于Java的多线程读写模拟系统 ## 项目简介 本项目是一个基于Java的多线程读写模拟系统,旨在通过模拟读者和写者线程的行为,展示操作系统中多线程并发处理的基本原理。项目通过读取配置文件、初始化时间戳、...

    c#多线程读写锁操作

    为了解决这个问题,C#提供了一种名为“读写锁”(ReaderWriterLockSlim)的同步原语,它允许对共享资源进行高效的读写控制,确保了多线程的安全性。本文将深入探讨如何利用读写锁在C#中实现多线程的高效安全资源访问...

    多线程读取文件

    在IT领域,多线程是并发处理任务的关键技术,尤其在读取大文件时,能够显著提高程序的执行效率。本文将围绕“多线程读取文件”这一主题,结合给定的标签“源码”和“工具”,深入探讨如何在Java等编程语言中实现这一...

    C#使用读写锁三行代码简单解决多线程并发的问题

    为了解决这个问题,我们可以利用C#中的读写锁(ReaderWriterLockSlim)来实现线程同步。本文通过三行代码展示了如何使用读写锁解决多线程并发写入文件的冲突。 读写锁的核心在于,它允许多个线程同时读取资源,但只...

    CreateFile 读写串口 最简demo

    HANDLE hSerialPort = CreateFile(comName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ``` 上述代码尝试以读写权限打开`COM1`,并设置为独占访问(`dwShareMode=0`)...

    C#文件多线程复制代码

    本文将详细讲解如何利用C#实现文件的多线程复制,包括线程池的使用、线程数量限制以及FileStream类的读写功能。 首先,线程是操作系统分配CPU时间的基本单位,每个线程负责执行一个独立的任务。在C#中,我们可以...

    Java的File类文件读写以及图片下载的总结

    以下是对`File`类以及文件读写、复制和图片下载的详细讲解。 1. **文件和文件夹的创建** 使用`File`类可以方便地创建新的文件或目录。例如,通过调用`createNewFile()`方法可以创建一个新文件,但需确保路径正确且...

    CreateFile 读写串口-加 线程 加 提示

    在这个特定的场景中,我们关注的是如何使用`CreateFile`来读写串口,并结合线程和提示功能。这通常涉及到串行通信、多线程编程以及用户界面交互。 串口通信是计算机之间通过串行端口进行数据交换的一种方式。在VC6...

    对Python多线程读写文件加锁的实例详解

    以下是对Python多线程读写文件加锁的详细解释。 首先,我们来看如何使用`fcntl`模块实现文件锁。`fcntl`模块提供了Unix系统中的`fcntl()`和`ioctl()`接口,其中`fcntl.flock()`函数是实现文件锁的关键。这个函数...

    C语言实现 多线程文件传输

    在线程函数`transfer_file`内部,我们可以使用标准I/O库或网络套接字库进行文件的读写操作。例如,如果是在本地文件系统中传输,可以使用`fopen()`, `fread()`, 和 `fwrite()`函数;如果是网络文件传输,可能需要...

    3_threads_write_file.rar_linux综合_threads_线程综合例子

    本示例"3_threads_write_file.rar"是关于在Linux下如何使用线程进行文件写入操作的一个综合实例。这个例子将帮助你深入理解和掌握线程在实际编程中的应用。 首先,我们要了解Linux下的线程API,它主要基于POSIX标准...

    多线程,重叠IO,异步读写 命名通道服务器源码

    《多线程、重叠IO、异步读写与命名通道服务器源码解析》 本文将深入探讨一种基于Windows API的多线程命名管道服务器的实现,涉及的关键技术包括多线程、重叠I/O(Overlapped I/O)、异步读写以及命名管道。这些技术...

    C++ 实现多线程文件传输的设计与实现

    在读写文件块时,确保同一时间只有一个线程访问该文件块。 4. **信号量(Semaphore)**:在文件传输过程中,可以使用信号量来控制线程数量,防止过多线程同时访问导致系统资源过度消耗。 5. **进度同步**:使用...

    android 单线程 多线程下载

    在分析和编写下载代码时,理解网络请求的生命周期、线程间的通信(例如使用`Handler`或`LiveData`)以及文件操作(如读写、合并)的源码至关重要。确保代码的健壮性和性能优化。 **标签“工具”**可能指的是使用...

    MFC线程复制文件程序

    在这个例子中,`CopyFileThread`函数是实际执行文件复制的线程函数,使用了MFC的CFile类来处理文件读写。主程序创建线程并传递文件路径,然后启动线程。文件复制完成后,线程自动结束。 总的来说,MFC线程复制文件...

Global site tag (gtag.js) - Google Analytics