今天给各位分享java禁止同时调用的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、Java中,若一个类的不同实例同时访问某一个方法。需要把该方法加锁吗?2、java中,两个线程同时调用同一个方法时,这两个线程真的是在同时执行这个方法吗???3、java 两个线程同时调用一个类里的同一个方法,这样会出现什么情况?有没有问题?4、java 如何调用方法里超过10秒就终止该方法,不往下执行,防止线程阻塞
Java中,若一个类的不同实例同时访问某一个方法。需要把该方法加锁吗?
需不需要加锁取决于你的方法调用是不是多线程,如果是多线程同时调用必然会存在冲突的情况导致结果不正确。
java中,两个线程同时调用同一个方法时,这两个线程真的是在同时执行这个方法吗???
要分清方法和变量之间的关系
方法是变量的处理流程,变量才是一个实例的主体部分,方法是所有实例#共用#的一个流程而已
无论哪个线程还是哪个实例都是共用同一个方法,所以都是可以同时执行这个方法的。
只是加上锁之后,被同一个锁锁住的实例调用的时候会把其他线程的调用暂停而已。
没加锁的则是同时运行方法,若是同一个实例里的话。。。 就会同时对该变量进行修改造成线程错误。。。
所以一定是同一个方法。。。 只是有加锁没加锁是其他线程是否需要暂停等待的差别
java 两个线程同时调用一个类里的同一个方法,这样会出现什么情况?有没有问题?
对于共享资源,会产生线程安全问题,所以要利用Java线程同步锁。
java 如何调用方法里超过10秒就终止该方法,不往下执行,防止线程阻塞
本来用DWR调用方法就是多线程的,线程总数与J2EE容器配置的有关。
建议如下:
如果你这个A()调用的接口一次只允许一个访问,那么需要在A所在的类里设置一个静态成员变量,如static String object = “some”。
然后在A()方法一开始用synchronized (object) {.. }把代码都包含进来。
这样可以确保一次只有一个访问。
如果接口一次最多运行固定数目的访问,如10个。那么复杂一些,不过我估计你不是这个情况。一般建议这个固定数目与J2EE容器配置的线程数一致即可。
上述方法都是为了防止接口被同时访问,但这样的后果就是前端用户会等待,甚至线程满。前端等待是没办法的,后面慢,前面只有排队了。线程满的话,最好的方式是采用非阻塞的IO(NIO),不过那个很难做到。你提出的10秒终止方法是一种方案,不过关键在于如何终止一个方法的运行。
很遗憾,Java不能任意终止一个方法的运行,不过对于接口操作,可以如下处理:
a) 如果接口是TCP/IP,那么可以通过强行关闭socket来终止。如:
timer.schedule( new TimerTask() {
public void run() {
socket.close();
}
}, 10000);
b) 如果接口是用类库的话,看看它有没有设置timeout的地方,如果有,那么设置一下,如果没有,那么没办法了。
补充:
你用了axis的setTimeout,理论上超过10秒后call.invoke会抛出异常的。
假设后台很慢,每次都需要10秒,假设weblogic线程池大小为50,那么如果同时访问的人超过50个,或者每秒访问量超过5个,那么就会发生线程阻塞。
这是系统性能问题,可以将weblogic的线程池最大数量设置高些来增加吞吐量。不过这种方式治标不治本,如果你的程序预计到并发访问量很大,那么后台响应超过1秒就不太合理了,这个改动起来就很麻烦了。
关于java禁止同时调用和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。