[quote=引用 13 楼 小灰狼的回复:][quote=引用 12 楼 qq_27184497 的回复:] 线程同步时只有一个线程在跑,进程同步的话不就相当于单进程了?
[quote=引用 12 楼 qq_27184497 的回复:] 线程同步时只有一个线程在跑,进程同步的话不就相当于单进程了?
文件锁的简单实现方法。 RandomAccessFile raf=new RandomAccessFile("c:/aa.txt","rw"); FileLock lock=raf.getChannel().lock(); //需要同步的代码 lock.release();
线程同步时只有一个线程在跑,进程同步的话不就相当于单进程了?
使用JNI 这个办法我倒是没有想到 只是对操作系统不太了解,不知道怎么做好,但感觉上,用了JNI之后不好跨平台了,并且数据共享可能会有点麻烦 我的项目里要用到数据库,并且数据库又提供了这个功能,于是就用它了,并且还可以跨服务器,但是无法提供 wait/notify、join 这类功能 祝你好运吧!
[quote=引用 4 楼 hemowolf 的回复:] 反正以我所掌握的知识来说,直接进行进程同步是不可行的。 要想进行互斥,可以使用数据库锁或者第三者的获取锁的服务器;如果想进程之间共享数据,可以把数据放到数据库中进行共享。 当然,JAVA中的同步,还包括 wait/notify、join 等功能,这些功能要想通过我说的办法实现,应该会很难。 祝楼主好运
反正以我所掌握的知识来说,直接进行进程同步是不可行的。 要想进行互斥,可以使用数据库锁或者第三者的获取锁的服务器;如果想进程之间共享数据,可以把数据放到数据库中进行共享。 当然,JAVA中的同步,还包括 wait/notify、join 等功能,这些功能要想通过我说的办法实现,应该会很难。 祝楼主好运
[quote=引用 2 楼 hemowolf 的回复:] 进程之间想直接同步会很麻烦 实践中,我也遇到过同步的问题,几个系统使用同一套流水号,但系统之间的流水号不能重复。这个需求应该和楼主的需求是一相同的。 如果是这样,你可以借使用 MySQL数据库。在MySQL 中,有 get_lock/release_lock 两个函数,可以对字符串进行加锁,使用上和 synchronized 很相似,只是你要想得到锁时,必须先连接数据库,然后通过JDBC调用 get_lock 函数,完成之后必须保证释放锁(我通过是用 try{ getLock("lock name")......} finally{ releaseLock("lock name"); } 这样的语句),否则你的某个锁可能永远用不了。这样不但可以在不同进程之间进行同步,也支持不同服务器之间进行同步。 如果不想用数据库,你可以自己写一个同步服务器,基本原理与数据库获取锁一样。
进程之间想直接同步会很麻烦 实践中,我也遇到过同步的问题,几个系统使用同一套流水号,但系统之间的流水号不能重复。这个需求应该和楼主的需求是一相同的。 如果是这样,你可以借使用 MySQL数据库。在MySQL 中,有 get_lock/release_lock 两个函数,可以对字符串进行加锁,使用上和 synchronized 很相似,只是你要想得到锁时,必须先连接数据库,然后通过JDBC调用 get_lock 函数,完成之后必须保证释放锁(我通过是用 try{ getLock("lock name")......} finally{ releaseLock("lock name"); } 这样的语句),否则你的某个锁可能永远用不了。这样不但可以在不同进程之间进行同步,也支持不同服务器之间进行同步。 如果不想用数据库,你可以自己写一个同步服务器,基本原理与数据库获取锁一样。
62,615
社区成员
307,307
社区内容
加载中
试试用AI创作助手写篇文章吧