- 浏览: 51830 次
- 性别:
- 来自: 杭州
文章分类
最新评论
最近在做一个数据存储优化。我们之前的模式是插入一定量的数据通过批处理进行存储,两个条件进行批处理,一个是超过批处理设定的最大个数,一个是超过批处理延迟时间,否则有新的数据就放入缓存中。
为了保证数据的完整性,现在要改成,不将数据加入缓存里,而改为存放在本地的.data文件中。
在优化的过程中,遇到了一个问题就是:如何确保一个文件只能由一个线程或程序打开?
在网上查找了一些解决办法,最常用的就是使用FileChannel获得FileLock。但是这种情况只适合使用write流进行锁定,当我读取的时候,我也要保证只有我这一个线程进行打开,所以锁定.data文件就不适合了。
最终的解决办法是,创建两个文件,一个是.data文件,一个是.lock文件,当线程对.data文件进行读写的时候,要新对.lock文件进行锁定。如果锁定失败,说明有别的程序在使用.data文件;如果锁定成功,则对.data文件进行操作,操作结束后,释放.lock文件。
为了保证数据的完整性,现在要改成,不将数据加入缓存里,而改为存放在本地的.data文件中。
在优化的过程中,遇到了一个问题就是:如何确保一个文件只能由一个线程或程序打开?
在网上查找了一些解决办法,最常用的就是使用FileChannel获得FileLock。但是这种情况只适合使用write流进行锁定,当我读取的时候,我也要保证只有我这一个线程进行打开,所以锁定.data文件就不适合了。
最终的解决办法是,创建两个文件,一个是.data文件,一个是.lock文件,当线程对.data文件进行读写的时候,要新对.lock文件进行锁定。如果锁定失败,说明有别的程序在使用.data文件;如果锁定成功,则对.data文件进行操作,操作结束后,释放.lock文件。
发表评论
-
关于Integer比较的小问题
2014-11-06 09:35 558关于Integer比较的小问题 Integer a ... -
Quartz+Spring集群配置(转)
2014-08-16 10:02 601概述 虽然单个Quartz实例能给予你很好的Job调度能力 ... -
Java中几个容易忽略的问题
2014-08-14 09:24 5711.数组转换成list 将数组转成成List一般使用 ... -
Java线程状态转换图
2014-08-13 13:28 660Java线程一共有七个状态,分别是新建,可运行,运行中, ... -
怎样对带有不可序列化属性的Java对象进行序列化 (转载)
2014-04-29 11:41 2196出于很多原因我们想使用自定义的序列化方法取代Java默认的机 ... -
关于判断两个对象是否相等的问题
2014-04-03 11:16 734起源面试中面试官问我的一个问题: long l1 = 1 ... -
java并发编程实践笔记
2014-01-10 15:57 6611, 保证线程安全的三种方法 :a, 不要跨线程访问共享变量 ... -
Java NIO系列教程之 Buffer(转)
2014-01-02 15:28 686原文链接 作者:Jakob Jenkov ... -
Apache+Tomcat+JK集群部署
2013-10-15 10:21 1134闲来无事,就把公司的项目拿来进行集群的学习,虽然都是网上找的 ... -
三种方式生成对象效率对比
2013-10-09 10:07 650对比不同方式生成对象的效率 三种方式生成对象: 1.通过 ... -
阻塞与非阻塞,同步与异步
2013-09-26 09:40 653socket阻塞与非阻塞,同步与异步 作者:huanggu ... -
使用Miglayout布局实例
2013-09-16 13:29 1009上个星期使用java swing做一个客户端界面。 ... -
Java Swing 滚动条自动到底端
2013-09-14 17:09 1131一句话就搞定。(垂直滑动条) ta_frameArea.s ... -
java swing MigLayout 布局管理
2013-09-09 19:42 13961. MigLayout 初始化的两种方法: MigLay ... -
Eclipse里使用javassist实例
2013-08-30 15:25 1392这两天比较无聊,随便找点东西进行学习。目标就瞄准了javas ... -
It is indirectly referenced from required .class file 错误解决方法
2013-08-30 14:21 1357今天在导入一个项目时出现It is indirectly r ... -
关于HashMap在多线程下的使用
2013-08-02 18:46 845最近在做项目的压力测试,测试的过程中,问题多多呀,基本上都是 ... -
Lucene初体验
2013-07-16 14:13 726很不错的一个文章,对于了解lucene很有帮助 http:// ... -
Lucene第一个实例
2013-07-16 10:01 693闲来无事,学习一下lucene,下面运行一下示例代码。 在de ... -
使用netbeans写swing程序真不错
2013-04-24 19:11 808一直都想使用Java做一些界面的小程序,可每次都拜倒在那复 ...
相关推荐
易语言提供了“加锁”和“解锁”命令来实现线程间的互斥访问,确保同一时刻只有一个线程能进行读写操作。 此外,还要注意资源的释放,包括文件句柄和线程句柄。读取完成后,必须确保正确关闭文件和结束线程,防止...
本教程将详细讲解如何在VC++ 2010环境下创建多线程,并实现一个用于打开文件的对话框。我们将深入探讨以下知识点: 1. **线程基础知识**: - 线程是操作系统中的基本执行单元,它与进程一起构成了并发执行的基础。...
在提供的"打开一个线程.vi"文件中,很可能包含了创建、管理和同步线程的相关代码。通过分析这个VI,我们可以学习如何在LabVIEW中有效地利用多线程技术。文件中的代码可能包括了线程创建、工作函数调用、同步机制的...
例如,一个线程可能负责读取文件,另一个线程可能负责计算或处理数据,还有可能有一个专门的线程用于更新用户界面。 3. **进度条与百分比显示**:这是用户界面设计中的关键元素,用来向用户提供任务执行状态的直观...
`TThread`是VCL(Visual Component Library)框架中的一个基础类,提供了创建和管理线程的基本功能。下面我们将详细讲解如何利用`TThread`实现多线程文件拷贝: 1. **创建自定义线程类**:首先,我们需要创建一个...
1. **初始化线程**:使用“创建线程”命令创建新的线程对象,为每个线程分配一个读取任务,如指定文件的起始位置和结束位置。 2. **读取文件**:在每个线程的代码段中,使用“打开文件”命令打开文件,然后使用...
在文件拷贝场景下,如果一个文件夹包含大量小文件,传统的单线程拷贝方式可能会因为频繁的文件系统操作而显得效率低下。多线程拷贝工具则可以将这些文件分配到不同的线程中同时处理,显著提高拷贝速度。 描述中提到...
可以通过使用CSingleLock或CCriticalSection等同步对象来确保在任何时候只有一个线程能访问文件,防止数据冲突。 此外,调试时,可以借助串口调试助手工具,如RealTerm或PuTTY,实时查看串口通信的数据流,这有助于...
Java多线程断点下载文件是一种高效的文件下载方式,它允许在下载过程中暂停并从上次停止的地方继续,尤其适用于大文件下载。以下是实现这一功能的关键知识点: 1. **获取文件信息**: - 使用`java.net.URL`和`java...
1. **多线程技术**:多线程是操作系统提供的一个核心特性,允许程序同时执行多个独立的执行路径。在文件传输系统中,每个线程可以负责一个文件的上传或下载,这样多个文件可以同时传输,显著提高了系统的吞吐量。...
当一个文件被打开时,操作系统可能会对其进行锁定,防止其他进程同时修改该文件,从而避免数据不一致的问题。因此,判断一个文件是否被其他进程调用,实际上是检查该文件是否被锁定或正在被其他进程访问。 ### 技术...
"htp多线程断点下载文件"这一主题,涉及了网络编程、多线程技术和文件处理等多个知识点。 首先,HTTP(超文本传输协议)是我们浏览网页和下载文件的基础,它是应用层协议,负责客户端和服务器之间的通信。然而,...
- **条件变量(Conditional Variables)**:允许线程在满足特定条件时继续执行,常用于线程间通信。 在压缩包中的D008文件,很可能是包含一个示例代码,演示了上述线程操作的实际应用。你可以打开这个文件,查看并...
压缩包子文件“MDI”可能指的是Multiple Document Interface,这是Windows的一种设计模式,允许在一个应用程序窗口内同时打开和操作多个文档。MDI应用程序通常包含一个主框架窗口和在其内部创建的子窗口,每个子窗口...
在这个"多线程文件分割源代码"项目中,我们看到的是一个使用VC++(Visual C++)编写的程序,其主要目标是将大文件高效地分割成多个小文件,每个部分由不同的线程处理。以下是这个项目涉及的一些关键知识点: 1. **...
- 当accept()函数接收到一个连接请求时,创建一个新的线程来处理该连接。在新线程中,服务器可以接收客户端发送的文件数据,并将其保存到本地磁盘。 - 新线程处理完文件传输后,关闭SOCKET连接。 2. **客户端**:...
首先,多线程是操作系统中的一种机制,它允许一个进程内存在多个并发执行的线程。在C语言中,我们可以使用POSIX线程库(pthread)来创建和管理线程。`pthread_create()`函数用于创建新线程,而`pthread_join()`用于...
开发人员可以通过调用`CreateFile()` API创建或打开一个文件对象,该API负责分配一个内核对象来表示文件。`CreateFile()`的参数包括文件名、所需的访问权限、共享模式、安全性设置、创建或打开文件的行为以及文件...
4. **创建下载线程**:根据文件大小,我们将文件划分为多个部分,并为每个部分创建一个新的线程。每个线程负责下载其分配的部分。 5. **管理下载进度**:为了跟踪下载进度,我们可以使用`Handler`和`Message`在主线...
本系统采用vc++6.0作为开发环境,它是一个经典的编程工具,支持C++标准库,能够方便地创建多线程应用程序。在这个项目中,我们将探讨多线程、文件传输以及网络Socket相关的知识点。 首先,多线程技术是并发处理的...