重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
自上而下是说的同一函数内的顺序和函数调用顺序,不是指的文件里的行号。例如无论写在第几行,main函数都是要首先运行的。
成都创新互联公司专业为企业提供涞水网站建设、涞水做网站、涞水网站设计、涞水网站制作等企业网站建设、网页设计与制作、涞水企业网站模板建站服务,10年涞水做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
在你要结束的地方添加System.exit(0);就行了,执行改行代码后,当前程序就会结束
本来用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秒就不太合理了,这个改动起来就很麻烦了。