免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4734 | 回复: 23
打印 上一主题 下一主题

不知道用什么方法能作到不让JAVA的程序多次执行。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-04 17:53 |只看该作者 |正序浏览
是这样的,
现在已经开发好一个JAVA的应用程序test,但是在CMD窗口下执行java test可以正常执行,

但是当你再开一个CMD窗口,再执行java test还是可以正常执行,

主要是这个程序是处理数据库的一个应用程序,这样开两个窗口都执行这一个test程序的话,就会出现一条数据,处理了两次。我现在想找一个方法,让这个程序打开之后再想在其它窗口再执行这个程序就会告诉对方不能执行,而程序也不会再启动!!

论坛徽章:
0
24 [报告]
发表于 2006-08-10 19:26 |只看该作者
通过写文件(ini操作快),检查文件信息也可以的。

论坛徽章:
0
23 [报告]
发表于 2006-08-10 12:28 |只看该作者
好像大家都没怎么看清楚讨论啊。。。。

我的意思是数据库标识,文件标识,锁表其实都差不多

根据LZ的情况,只本地判断,SOCKET是很好的,这种做法其实常用,TOMCAT等何尝不是

论坛徽章:
0
22 [报告]
发表于 2006-08-10 12:26 |只看该作者
原帖由 ruknow 于 2006-8-10 01:04 发表


java里面有finally可以保证执行恢复,

如果是JVM崩溃就没说了,不过这种情况不是程序有问题一般不会出现吧



我知道,请看清楚

其实也有不妥之处,跟文件还是一样


我是举例子说数据库标识跟文件标识的差别

论坛徽章:
0
21 [报告]
发表于 2006-08-10 11:24 |只看该作者
锁表风险太高了。

建议使用临时文件做标识。

论坛徽章:
0
20 [报告]
发表于 2006-08-10 01:15 |只看该作者
原帖由 ruknow 于 2006-8-9 01:12 发表


他的问题是



得看具体业务,如果这样的话,如果不是同时启动多个Instace,而是多次启动,总有个标记来说明数据已被处理过了。

数据库一张表做标记,启动程序时修改标记为已启动状态并commit,再处理 ...

解决这样的问题只要在某个字段做个标记说明这条记录处理过了就可以了吧?用事务并不是为解决这个问题的吧。我们好像兜了一个大圈子,没准楼主就是要做这么简单的事情

论坛徽章:
0
19 [报告]
发表于 2006-08-10 01:04 |只看该作者
原帖由 wobushiwo 于 2006-8-9 09:44 发表


其实也有不妥之处,跟文件还是一样

比如 “启动程序时修改标记为已启动状态并commit” 处理业务,假如失败或完成,那恢复标记什么的是没问题的

假如 “启动程序时修改标记为已启动状态并commit” 后就意 ...


java里面有finally可以保证执行恢复,

如果是JVM崩溃就没说了,不过这种情况不是程序有问题一般不会出现吧

论坛徽章:
0
18 [报告]
发表于 2006-08-09 10:12 |只看该作者
用数据库的好处是可以支持分布式应用的同步,用文件比较适合本机系统,用socket其实比较少见。
从扩展性来说的话数据库是个更好的解决方案。

论坛徽章:
0
17 [报告]
发表于 2006-08-09 09:44 |只看该作者
数据库一张表做标记,启动程序时修改标记为已启动状态并commit,再处理业务,业务处理失败或完成后再恢复标记。


其实也有不妥之处,跟文件还是一样

比如 “启动程序时修改标记为已启动状态并commit” 处理业务,假如失败或完成,那恢复标记什么的是没问题的

假如 “启动程序时修改标记为已启动状态并commit” 后就意外出问题呢?并没有执行意外的处理部分(程序中断)

那个标记还是依然存在

其实那就跟文件一样了,先建立锁文件,再处理,结束或有意外什么的再做处理

[ 本帖最后由 wobushiwo 于 2006-8-9 09:45 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2006-08-09 01:12 |只看该作者
原帖由 perryhg 于 2006-8-8 01:14 发表

如果是用数据库本身的事务管理,那么当程序的一个Instance还没运行完毕的时候,这个事务还没有commit,就是说这个数据库标记对其他人是不可见的,所以程序的其他instance还是会运行,那么如何防止程序多个Insta ...


他的问题是

是处理数据库的一个应用程序,这样开两个窗口都执行这一个test程序的话,就会出现一条数据,处理了两次


得看具体业务,如果这样的话,如果不是同时启动多个Instace,而是多次启动,总有个标记来说明数据已被处理过了。

数据库一张表做标记,启动程序时修改标记为已启动状态并commit,再处理业务,业务处理失败或完成后再恢复标记。
(不要告诉我在查表并修改提交的ms级时间启动两个Instance :)
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP