- 浏览: 460417 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
此去经年雪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 1586for windows: 1、add below lin ... -
[转]Java缩略图类带水印(jpg,png)
2011-08-31 09:09 1495package com.example; import ... -
swing和awt的两个简单使用
2011-08-29 13:27 11571、swing: package frame; ... -
[转]笔记:Hibernate性能优化事项(持续更新)
2011-08-27 10:38 15661、针对Oracle数据库而言 ... -
自定义classloader实现
2011-08-09 14:19 1385package classloader; import ... -
[总结篇]Java中从键盘接收一个字符
2011-05-29 21:53 2125引言 从控制台中读 ... -
利用commons-net包实现ftp上传下载例子
2011-01-19 16:50 3972下载文件的时候注意一下,第一个参数要用iso-8859_ ... -
请使用Oracle新版本驱动
2010-11-09 11:08 2515今天使用apache dbutils连接oracle10G时, ... -
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
2010-10-25 16:07 37636需求环境: 西安项目中,客户要求保护用户的密码信息,不 ... -
使用java.net.URL实现Post数据
2010-07-20 10:38 5922实现:利用URL访问URL并传递参数,然后获取返回结果。 可 ... -
如何导出大数据量的Excel文件
2010-05-25 09:07 2350一般导出Excel可以选择POI或者JXL,poi比较方便但是 ... -
Log4j使用总结
2010-01-09 09:50 919一、介绍 Log4j是Apa ... -
servlet下载文件不支持迅雷的解决方法
2009-11-18 13:42 3752servlet实现下载时,如果客户端安装了迅雷,发现不能正确下 ... -
JMS-ActiveMQ入门实例
2009-11-04 11:49 7168下载ActiveMQ http://activemq.a ... -
Lucene+HighLighter高亮显示实例
2009-11-03 18:37 5159今天搞了一个关于Lucene的例子,权当入门教程。网上有很多资 ... -
JAVA操作Excel参考
2009-11-03 10:33 972Java Excel是一开放源码项目,通过它Java开发人 ... -
freemarker根据模板生成文件的编码问题
2009-10-20 15:46 2567用freemarker生成html静态文件时,涉及的编码主要有 ... -
RSS基本知识、开发相关
2009-09-27 11:43 1188RSSLibJ是一个专门读 ... -
Ant+xFire生成客户端代码实战
2009-09-12 16:41 2691生成xfire客户端有多种方式,直接调用xFire暴露的接口、 ... -
Spring中JdbcTemplate相关的几个接口
2009-09-07 16:48 19181、org.springframew ...
相关推荐
主要介绍了java 文件锁的简单实现的相关资料,需要的朋友可以参考下
Java客户端实现Kafka生产者与消费者实例 kafka的副本机制及选举原理剖析 基于kafka实现应用日志实时上报统计分析 RabbitMQ 初步认识RabbitMQ及高可用集群部署 详解RabbitMQ消息分发机制及主题消息分发 ...
该文件是使用javaweb相关的知识编写的关于用户登录界面实现滑动图片解锁实现安全登录的功能项目
该项目旨在实现h5与fastdfs之间的高性能断点续传、秒传、大文件上传以及使用redis文件锁。系统提供了文件上传、文件处理、文件存储等功能。通过该项目,开发者可以学习并实践Java技术的应用,为后续的Web开发奠定...
java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...
java 实现的xml文件的读写 XML作为全球通用的结构化语言,越来越受人们青睐,各种开发平台(比如Microsoft Studio系列、Oracle系列、Inprise Borland系列等)也都把支持XML开发作为宣传口号之一 。由于笔者所从事的...
直接给文件夹的内容加上一个密码锁,可以防止外人访问内容。
java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...
这段代码实现了一个简单的日志记录器Logger,其中使用了Java的单例模式。在类的构造方法中,首先定义了一个静态变量instance,用于保存Logger的唯一实例。然后定义了一个静态锁对象lock,用于保证线程安全。接着定义...
java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...
实现一个拷贝文件的类使用字节流还是字符串.mp4 │ Java面试题13.线程的实现方式 怎么启动线程怎么区分线程.mp4 │ Java面试题14.线程并发库和线程池的作用?.mp4 │ Java面试题15.设计模式和常用的设计模式.mp4 │ ...
java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...
java的声音处理,介绍java中如何处理声音,包括实现响铃,播放wav,au等音频文件,以及控制声音的大小和音量,Beep.java; 媒体播放器,JMFMediaPlayer.java; 12反射 是java程序开发的特征之一,允许java程序对自身...
10 11文件锁FileLock 10 12Process类中的流 10 13带进度条的输入流 习题 第11章Java网络的基本知识 11 1使用URL 11 2读取URL中的资源 11 3显示URL资源中的HTML文件 11 4处理超链接 11 5InetAdress类 11 6套接字 11 7...
032003_【第20章:Java新IO】_文件锁笔记.pdf 032004_【第20章:Java新IO】_字符集笔记.pdf 032005_【第20章:Java新IO】_Selector笔记.pdf 042101_【课程讲解】_附录:Eclipse开发工具笔记.pdf 050101_〖开发实例〗...
java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...
java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...
2.3.7 java平台实现中的bug 2.3.8 测试 2.4 平台无关的七个步骤 2.5 平台无关性的策略 2.6 平台无关性和网络移动对象 2.7 资源页 第3章 安全 3.1 为什么需要安全性 3.2 基本沙箱 3.3 类装载器...