多用户执行相同程序的问题

时间:2022-08-29 11:26:44
因为这一段程序可以涉及到生成一些文件的问题,假设linux服务器上,a,b用户都登陆该服务器,执行这段程序主方法,问题就出来了,请教高手,有没有技术能在a执行的时候,对 程序就行锁定,让b执行不了。或者有更好的方法求教。

18 个解决方案

#1


你不知道JAVA中有一个叫做synchronized的东西吗?

#2


引用 楼主 u013050310 的回复:
因为这一段程序可以涉及到生成一些文件的问题,假设linux服务器上,a,b用户都登陆该服务器,执行这段程序主方法,问题就出来了,请教高手,有没有技术能在a执行的时候,对 程序就行锁定,让b执行不了。或者有更好的方法求教。


这里问的不是多线程的问题,大哥

#3


搞个文件,记录程序当前的运行状态,不过这样在并发高的情况下可能还是会冲突,如果是这种场景,就起个服务专门来处理咯

#4


看来只有锁能帮助你,试试一楼的方式

#5


该回复于2013-12-18 14:28:59被管理员删除

#6


该回复于2013-12-18 14:28:59被管理员删除

#7


该回复于2013-12-18 14:28:59被管理员删除

#8


有很多程序就是这样实现的,比如windows的“安装/删除程序”,你同时只能卸载一个程序。我觉得应该在程序里判断,每次启动时检测有没有该程序的一个进程已经启动,如果有,就弹个框,说明“改程序已经在运行”。不止lz明白否?

顺便为自己拉个票:
http://vote.blog.csdn.net/blogstaritem/blogstar2013/zhangerqing
多用户执行相同程序的问题

#9


Quote: 引用 8 楼 zhangerqing 的回复:

有很多程序就是这样实现的,比如windows的“安装/删除程序”,你同时只能卸载一个程序。我觉得应该在程序里判断,每次启动时检测有没有该程序的一个进程已经启动,如果有,就弹个框,说明“改程序已经在运行”。不止lz明白否?

a,b用户同时运行该段程序呢?判断进程的时候都没有启动

#10


定一个全局静态变量
public static boolean runing =false;
如果有人运行设置为 true; 每次运行前查查这个变量则可.

#11


引用 10 楼 guishuanglin 的回复:
定一个全局静态变量
public static boolean runing =false;
如果有人运行设置为 true; 每次运行前查查这个变量则可.


楼主这个不是多线程的问题了,如题,a,b都启动主方法,就会启动两个jvm了,设置静态变量也没法共享的。
可以考虑一下设置目录的权限来实现吧,不然就通过共享内存的方法,使用memcached做共享缓存

#12


引用 10 楼 guishuanglin 的回复:
定一个全局静态变量
public static boolean runing =false;
如果有人运行设置为 true; 每次运行前查查这个变量则可.
+1,查变量时加个锁,并发量少的就无所谓

#13


我开始以为一个用web实现的功能,看了题目好像不是。程序开始先判断有没有一个running.txt文件,有则说明已经有人在执行程序了,没有则说明有没有人,就在生成一个running.txt(还可以在里面写入一些信息),并开始执行,执行完了之后就删除running.txt,表示程序结束让其他人可以执行了。

#14


引用 13 楼 gagewang1 的回复:
我开始以为一个用web实现的功能,看了题目好像不是。程序开始先判断有没有一个running.txt文件,有则说明已经有人在执行程序了,没有则说明有没有人,就在生成一个running.txt(还可以在里面写入一些信息),并开始执行,执行完了之后就删除running.txt,表示程序结束让其他人可以执行了。


你好,如果是同时执行呢?

#15


如果是不同的jvm 是在操作系统里同时开两个程序,
那这样也没问题,java程序里大家不是经常用 config.properties 属性文件?
设置一个属性:
runing =false

如果程序启动了设置属性为 true , 解决了.

#16


搞软件的, 没有解决不了的问题, 总有办法的.

#17


数据库中记录文件编辑状态

#18


引用 14 楼 u013050310 的回复:
Quote: 引用 13 楼 gagewang1 的回复:

我开始以为一个用web实现的功能,看了题目好像不是。程序开始先判断有没有一个running.txt文件,有则说明已经有人在执行程序了,没有则说明有没有人,就在生成一个running.txt(还可以在里面写入一些信息),并开始执行,执行完了之后就删除running.txt,表示程序结束让其他人可以执行了。


你好,如果是同时执行呢?
有很高的并发?

#1


你不知道JAVA中有一个叫做synchronized的东西吗?

#2


引用 楼主 u013050310 的回复:
因为这一段程序可以涉及到生成一些文件的问题,假设linux服务器上,a,b用户都登陆该服务器,执行这段程序主方法,问题就出来了,请教高手,有没有技术能在a执行的时候,对 程序就行锁定,让b执行不了。或者有更好的方法求教。


这里问的不是多线程的问题,大哥

#3


搞个文件,记录程序当前的运行状态,不过这样在并发高的情况下可能还是会冲突,如果是这种场景,就起个服务专门来处理咯

#4


看来只有锁能帮助你,试试一楼的方式

#5


该回复于2013-12-18 14:28:59被管理员删除

#6


该回复于2013-12-18 14:28:59被管理员删除

#7


该回复于2013-12-18 14:28:59被管理员删除

#8


有很多程序就是这样实现的,比如windows的“安装/删除程序”,你同时只能卸载一个程序。我觉得应该在程序里判断,每次启动时检测有没有该程序的一个进程已经启动,如果有,就弹个框,说明“改程序已经在运行”。不止lz明白否?

顺便为自己拉个票:
http://vote.blog.csdn.net/blogstaritem/blogstar2013/zhangerqing
多用户执行相同程序的问题

#9


Quote: 引用 8 楼 zhangerqing 的回复:

有很多程序就是这样实现的,比如windows的“安装/删除程序”,你同时只能卸载一个程序。我觉得应该在程序里判断,每次启动时检测有没有该程序的一个进程已经启动,如果有,就弹个框,说明“改程序已经在运行”。不止lz明白否?

a,b用户同时运行该段程序呢?判断进程的时候都没有启动

#10


定一个全局静态变量
public static boolean runing =false;
如果有人运行设置为 true; 每次运行前查查这个变量则可.

#11


引用 10 楼 guishuanglin 的回复:
定一个全局静态变量
public static boolean runing =false;
如果有人运行设置为 true; 每次运行前查查这个变量则可.


楼主这个不是多线程的问题了,如题,a,b都启动主方法,就会启动两个jvm了,设置静态变量也没法共享的。
可以考虑一下设置目录的权限来实现吧,不然就通过共享内存的方法,使用memcached做共享缓存

#12


引用 10 楼 guishuanglin 的回复:
定一个全局静态变量
public static boolean runing =false;
如果有人运行设置为 true; 每次运行前查查这个变量则可.
+1,查变量时加个锁,并发量少的就无所谓

#13


我开始以为一个用web实现的功能,看了题目好像不是。程序开始先判断有没有一个running.txt文件,有则说明已经有人在执行程序了,没有则说明有没有人,就在生成一个running.txt(还可以在里面写入一些信息),并开始执行,执行完了之后就删除running.txt,表示程序结束让其他人可以执行了。

#14


引用 13 楼 gagewang1 的回复:
我开始以为一个用web实现的功能,看了题目好像不是。程序开始先判断有没有一个running.txt文件,有则说明已经有人在执行程序了,没有则说明有没有人,就在生成一个running.txt(还可以在里面写入一些信息),并开始执行,执行完了之后就删除running.txt,表示程序结束让其他人可以执行了。


你好,如果是同时执行呢?

#15


如果是不同的jvm 是在操作系统里同时开两个程序,
那这样也没问题,java程序里大家不是经常用 config.properties 属性文件?
设置一个属性:
runing =false

如果程序启动了设置属性为 true , 解决了.

#16


搞软件的, 没有解决不了的问题, 总有办法的.

#17


数据库中记录文件编辑状态

#18


引用 14 楼 u013050310 的回复:
Quote: 引用 13 楼 gagewang1 的回复:

我开始以为一个用web实现的功能,看了题目好像不是。程序开始先判断有没有一个running.txt文件,有则说明已经有人在执行程序了,没有则说明有没有人,就在生成一个running.txt(还可以在里面写入一些信息),并开始执行,执行完了之后就删除running.txt,表示程序结束让其他人可以执行了。


你好,如果是同时执行呢?
有很高的并发?