Java servlet线程访问控件
由调用的servlet方法中的好友 dopost/doget我都有一个代码Java servlet线程访问控件,java,multithreading,servlets,Java,Multithreading,Servlets,由调用的servlet方法中的好友 dopost/doget我都有一个代码 synchronized (this) { String filePath="E:\\FSPATH1\\2KL06CS048\\"; System.out.println("Directory Created ????????????"+new File(filePath).mkdir()); } 因此,上述servlet的多个线程可以一次输入上述代码块,也可以不输入 但Servlet生命周期的概念是,只有一个S
synchronized (this)
{
String filePath="E:\\FSPATH1\\2KL06CS048\\";
System.out.println("Directory Created ????????????"+new File(filePath).mkdir());
}
因此,上述servlet的多个线程可以一次输入上述代码块,也可以不输入
但Servlet生命周期的概念是,只有一个Servlet实例,对于该Servlet的每个请求,在该实例上创建一个线程 实际上我的要求是
请注意,每个语句一次以一个线程结束。是的,您的代码将确保只有一个线程可以进入块。Q.在一个servlet方法中,dopost/doget调用该方法时,我有一个代码:
synchronized(this){}
-->Servlet容器(tomcat)将为每个请求创建一个线程,因此每次在
doGet()和doPost()方法中所包含的内容都是各自线程的本地内容。因此,您无需再次同步此
。因此,您的想法是完全错误的。不管问题/答案如何,servlet方法中的这个特定代码片段都是一个糟糕的做法。无论您认为用这段代码解决什么问题,都需要以不同的方式来解决,这样您就可以摆脱同步(this)
。但是Servlet生命周期的概念说,Servlet只有一个实例,对于该Servlet的每个请求,都会在该实例上创建一个线程。实际上,我的要求是肯定的。在整个生命周期中只创建一个servlet实例。每个请求创建一个线程。但是Servlet生命周期概念说只有一个Servlet实例,对于该Servlet的每个请求,在该实例上创建一个线程。实际上,我的要求是1)发出请求(Servlet调用,该Servlet的任务是在服务器中创建一个目录)2)从servlet调用返回后,我将重命名创建的目录。3)重命名另一个线程时,不得创建相同的目录并修改目录的内容,因为我希望同步servlet中的代码。