- 浏览: 469401 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
此去经年雪123:
为啥生成的是乱码 你好
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
alonglw:
zxf0089216 写道1.为什么每次都是10001RSAK ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
zxf0089216:
1.为什么每次都是10001RSAKeyPair(" ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
dunhanson:
后台的测试main方法都能加密解密。前台加密后的密文交给后台解 ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
map612:
wula0010 写道仔细看了下,可以运行RSAUtil.ma ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
项目使用到集群环境,流程发送时如果确保一个流程不会被两个流程同时调用?
有一种办法是用文件锁的方式来实现。
代码如下:
锁接口:
package lock; import java.io.FileNotFoundException; import java.io.IOException; public interface Lock { /** * 检测是否被锁定 * @return true被锁定 ,false空闲 * */ public abstract boolean isLocked() throws FileNotFoundException; /** * 获取锁资源 * @return true成功锁定目标资源 ,false锁定操作失败 * */ public abstract boolean obtain() throws IOException; /** * 释放锁 * */ public abstract void unlock(); }
文件锁的实现:
package lock; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; import java.nio.channels.OverlappingFileLockException; public class FileProgrameLock implements Lock{ private String callerThreadID = null; private String lockFileName = null; FileChannel channel = null; private FileLock lock = null; public static Lock get(String fileName,String callerThreadID){ FileProgrameLock d = new FileProgrameLock(fileName); d.callerThreadID = callerThreadID; return (Lock)d; } public FileProgrameLock(String lockFileName){ this.lockFileName = lockFileName; } /** * 检测是否被锁定-不建议使用 * @return true被锁定 ,false空闲 * @deprecated * */ public boolean isLocked() throws FileNotFoundException { File tf = new File(lockFileName); if( ! tf.exists()){ return false; } FileChannel __channel = new RandomAccessFile(tf, "rw").getChannel(); FileLock tl = null; try { tl = __channel.tryLock(); if (tl == null) { return true; } else { return false; } } catch (OverlappingFileLockException e) { return true; } catch (IOException e) { return true; }catch (Exception e) { return true; }finally{ try { if(tl != null){ tl.release(); } tl = null; if(__channel.isOpen()){ __channel.close(); } __channel = null; tf = null; } catch (IOException e) { e.printStackTrace(); } } } /** * 获取锁资源 * @return true成功锁定目标资源 ,false锁定操作失败 * */ public boolean obtain() throws IOException { File tf = new File(lockFileName); createFile(); channel = new RandomAccessFile(tf, "rw").getChannel(); try { // System.out.println("get lock 000 >>>>>>>>>>>>>>>"); lock = channel.lock(); // System.out.println("get lock >>>>>>>>>>>>>>>"); return true; } catch (OverlappingFileLockException e) { return false; }catch (Exception e) { return false; } } /** * 释放锁 * */ public void unlock() { try { if(lock != null){ lock.release(); } System.out.println(callerThreadID + " unlock XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "); if(channel != null && channel.isOpen()){ channel.close(); } lock = null; channel = null; this.deleteFile(); } catch (IOException e) { } } protected void finalize() throws Throwable { System.out.println(callerThreadID + this.getClass() + " .finalize()"); super.finalize(); } private void createFile() throws IOException{ try{ File tf = new File(lockFileName); if(! tf.exists()){ tf.createNewFile(); } tf = null; }catch(IOException e){ System.out.println(e+lockFileName); throw e; } } private void deleteFile(){ File tf = new File(lockFileName); if(tf.exists()){ tf.delete(); } tf = null; } }
工厂类:
package lock; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; public class MakeLock implements Runnable{ private String threadID = ""; public void run() { try { while(true) { test2(threadID); Thread.sleep(200); } } catch (IOException e) { System.out.println(e); e.printStackTrace(); } catch (InterruptedException e) { System.out.println(e); } } public void test2(String threadID) throws FileNotFoundException, IOException, InterruptedException{ Lock lock = new MakeLock(threadID).getLock("c:/001/lockfile001.lock",threadID); System.out.println(threadID+":obtain..."); boolean b = lock.obtain(); //当有重叠时会发生等待,所以外侧先执行isLocked()判断 System.out.println(threadID+":obtained "+b); if(b){//执行业务逻辑 Thread.sleep(390); for(int i = 0 ; i < Integer.MAX_VALUE ; i ++){ ; } lock.unlock(); } lock = null; } public MakeLock(String threadID){ this.threadID = threadID; } public Lock getLock(String name,String threadID) { final StringBuffer buf = new StringBuffer(); return FileProgrameLock.get(name,threadID); } }
使用方法:
public void test2(String threadID) throws FileNotFoundException, IOException, InterruptedException{ Lock lock = new MakeLock(threadID).getLock("c:/001/lockfile001.lock",threadID); if (!lock.isLocked()) { System.out.println(threadID+":obtain..."); boolean b = lock.obtain(); System.out.println(threadID+":obtained "+b); if(b){//执行业务逻辑 Thread.sleep(390); for(int i = 0 ; i < Integer.MAX_VALUE ; i ++){ ; } lock.unlock(); } }else{ System.out.println(threadID+":can't get a lock :"+lock); } lock = null; }
多线程调用测试:
public static void main(String[] args) { //new AAA().test(); System.out.println("========================================="); Thread th1 = new Thread(new MakeLock("==================== thread1 ====================")); Thread th2 = new Thread(new MakeLock("#################### thread2 ####################")); Thread th3 = new Thread(new MakeLock("@@@@@@@@@@@@@@@@@@@@ thread3 @@@@@@@@@@@@@@@@@@@@")); Thread th4 = new Thread(new MakeLock("$$$$$$$$$$$$$$$$$$$$ thread4 $$$$$$$$$$$$$$$$$$$$")); Thread th5 = new Thread(new MakeLock("&&&&&&&&&&&&&&&&&&&& thread5 &&&&&&&&&&&&&&&&&&&&")); th1.start(); th2.start(); th3.start(); th4.start(); th5.start(); }
=================
经测试可以在共享文件系统下工作。
附件中AAA.java多线程测试代码可以直接运行。
- lock.rar (3.1 KB)
- 下载次数: 206
发表评论
-
linux、win下用jmx监控tomcat运行情况
2012-03-14 15:52 1634for windows: 1、add below lin ... -
[转]Java缩略图类带水印(jpg,png)
2011-08-31 09:09 1571package com.example; import ... -
swing和awt的两个简单使用
2011-08-29 13:27 12401、swing: package frame; ... -
[转]笔记:Hibernate性能优化事项(持续更新)
2011-08-27 10:38 16041、针对Oracle数据库而言 ... -
自定义classloader实现
2011-08-09 14:19 1432package classloader; import ... -
[总结篇]Java中从键盘接收一个字符
2011-05-29 21:53 2182引言 从控制台中读 ... -
利用commons-net包实现ftp上传下载例子
2011-01-19 16:50 4058下载文件的时候注意一下,第一个参数要用iso-8859_ ... -
请使用Oracle新版本驱动
2010-11-09 11:08 2570今天使用apache dbutils连接oracle10G时, ... -
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
2010-10-25 16:07 37848需求环境: 西安项目中,客户要求保护用户的密码信息,不 ... -
使用java.net.URL实现Post数据
2010-07-20 10:38 5985实现:利用URL访问URL并传递参数,然后获取返回结果。 可 ... -
如何导出大数据量的Excel文件
2010-05-25 09:07 2438一般导出Excel可以选择POI或者JXL,poi比较方便但是 ... -
Log4j使用总结
2010-01-09 09:50 979一、介绍 Log4j是Apa ... -
servlet下载文件不支持迅雷的解决方法
2009-11-18 13:42 3801servlet实现下载时,如果客户端安装了迅雷,发现不能正确下 ... -
JMS-ActiveMQ入门实例
2009-11-04 11:49 7224下载ActiveMQ http://activemq.a ... -
Lucene+HighLighter高亮显示实例
2009-11-03 18:37 5276今天搞了一个关于Lucene的例子,权当入门教程。网上有很多资 ... -
JAVA操作Excel参考
2009-11-03 10:33 1036Java Excel是一开放源码项目,通过它Java开发人 ... -
freemarker根据模板生成文件的编码问题
2009-10-20 15:46 2621用freemarker生成html静态文件时,涉及的编码主要有 ... -
RSS基本知识、开发相关
2009-09-27 11:43 1246RSSLibJ是一个专门读 ... -
Ant+xFire生成客户端代码实战
2009-09-12 16:41 2734生成xfire客户端有多种方式,直接调用xFire暴露的接口、 ... -
Spring中JdbcTemplate相关的几个接口
2009-09-07 16:48 19571、org.springframew ...
相关推荐
以下是一个简单的 Java 文件锁实现示例: ```java public class FileLocker { public static void main(String[] args) throws IOException { File f = new File("aaa.txt"); System.out.println(getFileContent...
本文将深入探讨如何使用Redisson和Curator框架来实现Java环境中的分布式锁。 首先,让我们来看一下Redisson实现的分布式锁。Redis是一个高性能的键值数据库,常被用作分布式系统的缓存或数据存储。Redisson是基于...
在给定的压缩包文件中,我们关注的是"FastCopyFile.java"、"UseFloatBuffer.java"以及NIO中的文件锁功能。 首先,让我们详细了解一下`FastCopyFile.java`。这个文件很可能是一个示例程序,演示了如何使用Java NIO...
10. **安全性**:在多线程环境下,文件操作需注意文件锁,避免同一时刻多个线程修改同一文件,造成数据混乱。 通过以上知识点的综合运用,我们可以构建一个高效、安全的多线程文件传输系统。实际编程中,还需要根据...
在Java中,写文件是通过`java.io`包中的类实现的,主要涉及File类、FileWriter类、BufferedWriter类等。下面将详细阐述Java写文件的相关知识点。 1. **File类**:File类是文件和目录路径名的抽象表示形式。它不包含...
在 Java 中,还有其他一些锁机制,例如 Semaphore、CountDownLatch 和 CyclicBarrier 等,它们都可以用来实现线程同步和线程安全。 Java 中的多线程编程需要充分考虑线程安全和锁机制的问题,否则可能会导致程序的...
通过以上步骤,我们可以实现一个基本的Java文件上传进度条功能。这不仅提高了用户体验,也让文件上传过程变得更加透明。在实际开发中,还需要根据具体需求和环境进行调整和优化,例如,增加上传策略(如限速、优先级...
6. **文件保护**:为了保护文件,可以设定访问权限或者使用文件锁。Java的`java.nio.file`包提供了丰富的文件操作接口,如`Files.setPosixFilePermissions()`和`Files.newFileChannel()`,可以用来设置权限和创建...
当然,实际应用中可能需要考虑更多因素,如错误处理、文件锁、并发访问等。在大型项目中,你可能会选择使用Apache Commons IO库或Java 8的Stream API来简化文件操作。 总的来说,“简单java文件过滤”涉及了Java中...
在"project"这个压缩包文件中,应该包含该项目的源代码,包括Java的主程序、JNI接口定义以及C++的实现。通过阅读和分析这些代码,你可以更深入地理解如何在Java中利用迅雷的下载能力。记得在实际操作时,要遵循迅雷...
该项目旨在实现h5与fastdfs之间的高性能断点续传、秒传、大文件上传以及使用redis文件锁。系统提供了文件上传、文件处理、文件存储等功能。通过该项目,开发者可以学习并实践Java技术的应用,为后续的Web开发奠定...
Java Redis分布式锁的正确实现方式详解 Java Redis分布式锁是指使用Redis实现的分布式锁机制,旨在解决分布式系统中的并发问题。分布式锁有三种实现方式:数据库乐观锁、基于Redis的分布式锁和基于ZooKeeper的...
- 为了保证操作的原子性,可以考虑在处理过程中使用文件锁,以防止在压缩过程中文件被其他进程修改。 - 如果ZIP文件非常大,解压和再压缩的过程可能会消耗大量时间和资源,因此在处理大数据量时需要谨慎设计。 6....
在Java编程环境中,实现一个操作系统级别的文件系统是一项挑战性的工作,因为这涉及到对底层硬件、内存管理和并发控制的理解。然而,通过使用Java提供的类库和API,我们可以构建一个模拟的文件系统,它能够进行基本...
在本案例中,我们将探讨如何使用Java实现文件的多线程下载,这对于处理大文件或者在网络带宽有限的情况下尤其有用。通过多线程下载,可以将文件分割成多个部分并同时下载,从而缩短整体下载时间。 首先,我们需要...
例如,如果文件正在被其他进程使用,可能需要实现锁机制。同时,确保在处理文件后正确关闭输入/输出流,以防止资源泄露。 总结起来,Java提供了丰富的API来处理文件操作,包括分割大文件。通过结合`FileInputStream...
总结来说,这个Java加密锁例子展示了如何通过JNI调用本地动态库来与坚石公司的ET199加密锁进行通信,以实现软件的保护和授权管理。理解和运用这个示例可以帮助开发者更好地保护他们的软件产品免受非法复制和使用。
这里需要注意文件锁的管理,以防止并发上传时的文件冲突。 对于断点续传,`plupload`会在客户端保存上传进度,如果上传中断,用户可以继续未完成的上传,服务器端需要有相应的机制识别并处理这些续传请求。这通常...
在Java中,我们可以看到两个关键文件:PersistentIdealHashTreeTest.java和PersistentIdealHashTree.java。前者是测试类,用于验证和测试PersistentIdealHashTree的正确性和性能;后者则是实际的数据结构实现,包含...