Java如何 进程同步?(是进程同步,不是线程同步!别弄错了)

CCDDzclxy 2016-04-27 04:58:30
RT
注意,我问的不是线程同步啊 ! ! ! ... ...


网上搜了一下貌似没有搜到...
网上看到有一处说到 “jdk自身没有提供进程同步的工具类”,不知是否真是这样??


如果真的“jdk自身没有提供进程同步的工具类”,请大家明确告诉我就行。

如果有 进程同步 的方案,请大家指教下,给出任何 文章、链接、代码、关键字 都行。

感谢大家。
















...全文
568 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2016-05-04
  • 打赏
  • 举报
回复
引用 18 楼 qq_27184497 的回复:
[quote=引用 13 楼 小灰狼的回复:][quote=引用 12 楼 qq_27184497 的回复:] 线程同步时只有一个线程在跑,进程同步的话不就相当于单进程了?
线程同步时只有一个线程在跑? 你们体育老师给你们上计算机课时是这么教的吗?[/quote] 你想啊,如果是双线程的话,一个线程在执行的时候另一个线程是不是在等待? 进程也一样,一个进程在运行了,另一个进程是不是也停止了? 个人观点!看你怎么理解咯?[/quote] 我的意思 线程不同步时,CPU里也只能是一个线程在跑 当然这是单CPU、单核心的情况下
  • 打赏
  • 举报
回复
引用 13 楼 小灰狼的回复:
[quote=引用 12 楼 qq_27184497 的回复:] 线程同步时只有一个线程在跑,进程同步的话不就相当于单进程了?
线程同步时只有一个线程在跑? 你们体育老师给你们上计算机课时是这么教的吗?[/quote] 你想啊,如果是双线程的话,一个线程在执行的时候另一个线程是不是在等待? 进程也一样,一个进程在运行了,另一个进程是不是也停止了? 个人观点!看你怎么理解咯?
小灰狼 2016-05-03
  • 打赏
  • 举报
回复
引用 15 楼 piaopiao11 的回复:
文件锁的简单实现方法。 RandomAccessFile raf=new RandomAccessFile("c:/aa.txt","rw"); FileLock lock=raf.getChannel().lock(); //需要同步的代码 lock.release();
引用 15 楼 piaopiao11 的回复:
文件锁的简单实现方法。 RandomAccessFile raf=new RandomAccessFile("c:/aa.txt","rw"); FileLock lock=raf.getChannel().lock(); //需要同步的代码 lock.release();
不过,好象还是无法支持 wait/notify,join 等机制哦,这得另外想法子
oxcow 2016-05-03
  • 打赏
  • 举报
回复
http://www.cnblogs.com/CareySon/archive/2012/04/14/Process-SynAndmutex.html http://www.cnblogs.com/sonic4x/archive/2011/07/05/2098036.html https://www.zhihu.com/question/36529093
piaopiao11 2016-05-03
  • 打赏
  • 举报
回复
文件锁的简单实现方法。 RandomAccessFile raf=new RandomAccessFile("c:/aa.txt","rw"); FileLock lock=raf.getChannel().lock(); //需要同步的代码 lock.release();
piaopiao11 2016-05-03
  • 打赏
  • 举报
回复
如果是同一台服务器,不同进程同步,可以利用文件锁。 如果是不同的服务器,大概只能用数据库锁了。
小灰狼 2016-05-03
  • 打赏
  • 举报
回复
引用 12 楼 qq_27184497 的回复:
线程同步时只有一个线程在跑,进程同步的话不就相当于单进程了?
线程同步时只有一个线程在跑? 你们体育老师给你们上计算机课时是这么教的吗?
  • 打赏
  • 举报
回复
线程同步时只有一个线程在跑,进程同步的话不就相当于单进程了?
CCDDzclxy 2016-04-28
  • 打赏
  • 举报
回复
还有 其它 不同的回复吗?
CCDDzclxy 2016-04-28
  • 打赏
  • 举报
回复
引用 6 楼 hemowolf 的回复:
使用JNI 这个办法我倒是没有想到 只是对操作系统不太了解,不知道怎么做好,但感觉上,用了JNI之后不好跨平台了,并且数据共享可能会有点麻烦 我的项目里要用到数据库,并且数据库又提供了这个功能,于是就用它了,并且还可以跨服务器,但是无法提供 wait/notify、join 这类功能 祝你好运吧!
感谢回复
小灰狼 2016-04-28
  • 打赏
  • 举报
回复
引用 5 楼 CCDDzclxy 的回复:
[quote=引用 4 楼 hemowolf 的回复:] 反正以我所掌握的知识来说,直接进行进程同步是不可行的。 要想进行互斥,可以使用数据库锁或者第三者的获取锁的服务器;如果想进程之间共享数据,可以把数据放到数据库中进行共享。 当然,JAVA中的同步,还包括 wait/notify、join 等功能,这些功能要想通过我说的办法实现,应该会很难。 祝楼主好运
我也是 问一下,确认一下。 我只是简单的 同一台机器的进程间的同步,我想到的方式是 jni 调用 系统API 进行进程同步,还是比较方便的。 但是 我不确定java里面是否有线程的进程同步的机制。如果java有现成的的机制,而 我又从jni绕一下 就显得太业余了...[/quote] 使用JNI 这个办法我倒是没有想到 只是对操作系统不太了解,不知道怎么做好,但感觉上,用了JNI之后不好跨平台了,并且数据共享可能会有点麻烦 我的项目里要用到数据库,并且数据库又提供了这个功能,于是就用它了,并且还可以跨服务器,但是无法提供 wait/notify、join 这类功能 祝你好运吧!
CCDDzclxy 2016-04-28
  • 打赏
  • 举报
回复
引用 4 楼 hemowolf 的回复:
反正以我所掌握的知识来说,直接进行进程同步是不可行的。 要想进行互斥,可以使用数据库锁或者第三者的获取锁的服务器;如果想进程之间共享数据,可以把数据放到数据库中进行共享。 当然,JAVA中的同步,还包括 wait/notify、join 等功能,这些功能要想通过我说的办法实现,应该会很难。 祝楼主好运
我也是 问一下,确认一下。 我只是简单的 同一台机器的进程间的同步,我想到的方式是 jni 调用 系统API 进行进程同步,还是比较方便的。 但是 我不确定java里面是否有线程的进程同步的机制。如果java有现成的的机制,而 我又从jni绕一下 就显得太业余了...
小灰狼 2016-04-28
  • 打赏
  • 举报
回复
引用 3 楼 CCDDzclxy 的回复:
[quote=引用 2 楼 hemowolf 的回复:] 进程之间想直接同步会很麻烦 实践中,我也遇到过同步的问题,几个系统使用同一套流水号,但系统之间的流水号不能重复。这个需求应该和楼主的需求是一相同的。 如果是这样,你可以借使用 MySQL数据库。在MySQL 中,有 get_lock/release_lock 两个函数,可以对字符串进行加锁,使用上和 synchronized 很相似,只是你要想得到锁时,必须先连接数据库,然后通过JDBC调用 get_lock 函数,完成之后必须保证释放锁(我通过是用 try{ getLock("lock name")......} finally{ releaseLock("lock name"); } 这样的语句),否则你的某个锁可能永远用不了。这样不但可以在不同进程之间进行同步,也支持不同服务器之间进行同步。 如果不想用数据库,你可以自己写一个同步服务器,基本原理与数据库获取锁一样。
那也就是说,java 没有提供 简单方便的方式来做 进程同步的事情喽??只能自己通过 一些别的技术来实现类似的效果?[/quote] 反正以我所掌握的知识来说,直接进行进程同步是不可行的。 要想进行互斥,可以使用数据库锁或者第三者的获取锁的服务器;如果想进程之间共享数据,可以把数据放到数据库中进行共享。 当然,JAVA中的同步,还包括 wait/notify、join 等功能,这些功能要想通过我说的办法实现,应该会很难。 祝楼主好运
CCDDzclxy 2016-04-28
  • 打赏
  • 举报
回复
引用 2 楼 hemowolf 的回复:
进程之间想直接同步会很麻烦 实践中,我也遇到过同步的问题,几个系统使用同一套流水号,但系统之间的流水号不能重复。这个需求应该和楼主的需求是一相同的。 如果是这样,你可以借使用 MySQL数据库。在MySQL 中,有 get_lock/release_lock 两个函数,可以对字符串进行加锁,使用上和 synchronized 很相似,只是你要想得到锁时,必须先连接数据库,然后通过JDBC调用 get_lock 函数,完成之后必须保证释放锁(我通过是用 try{ getLock("lock name")......} finally{ releaseLock("lock name"); } 这样的语句),否则你的某个锁可能永远用不了。这样不但可以在不同进程之间进行同步,也支持不同服务器之间进行同步。 如果不想用数据库,你可以自己写一个同步服务器,基本原理与数据库获取锁一样。
那也就是说,java 没有提供 简单方便的方式来做 进程同步的事情喽??只能自己通过 一些别的技术来实现类似的效果?
小灰狼 2016-04-28
  • 打赏
  • 举报
回复
进程之间想直接同步会很麻烦 实践中,我也遇到过同步的问题,几个系统使用同一套流水号,但系统之间的流水号不能重复。这个需求应该和楼主的需求是一相同的。 如果是这样,你可以借使用 MySQL数据库。在MySQL 中,有 get_lock/release_lock 两个函数,可以对字符串进行加锁,使用上和 synchronized 很相似,只是你要想得到锁时,必须先连接数据库,然后通过JDBC调用 get_lock 函数,完成之后必须保证释放锁(我通过是用 try{ getLock("lock name")......} finally{ releaseLock("lock name"); } 这样的语句),否则你的某个锁可能永远用不了。这样不但可以在不同进程之间进行同步,也支持不同服务器之间进行同步。 如果不想用数据库,你可以自己写一个同步服务器,基本原理与数据库获取锁一样。
tangxheng 2016-04-28
  • 打赏
  • 举报
回复
进程同步,参考多客户端访问服务器做到的安全问题即可。
java_charpnet 2016-04-28
  • 打赏
  • 举报
回复
java不是运行在jvm,还能进程同步啊,估计线程也不是真正的线程,也是jvm模拟的
lxraiyl 2016-04-28
  • 打赏
  • 举报
回复
java并没有直接提供进程间同步的方法。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧