由servlet方法调用的朋友 无论是dopost / doget我都有代码
synchronized (this)
{
String filePath="E:\\FSPATH1\\2KL06CS048\\";
System.out.println("Directory Created ????????????"+new File(filePath).mkdir());
}
因此上述servlet的多个线程可以一次输入上面的代码块而不是?
但Servlet LifeCycle Concept说只有一个Servlet实例,并且对于该servlet的每个请求,在该实例上创建一个线程。
其实我的要求是
答案 0 :(得分:1)
synchronized
确保只有一个线程可以在一个线程上执行封闭的块
时间。
更多要点:
synchronized关键字可以应用于方法或语句块,并为一次只能由一个线程执行的关键部分提供保护。
synchronized关键字可以防止关键部分代码一次被多个线程执行。
当应用于静态方法时,整个类在一个线程一次执行方法时被锁定。
当应用于实例方法时,实例在被一个线程访问时被锁定。
当应用于对象或数组时,对象或数组被锁定,而相关的代码块由一个线程执行。
请注意,每个语句都以一次一个线程结束。
答案 1 :(得分:1)
Q。在由dopost / doget调用的servlet方法中我有一个代码:synchronized (this) {}
---> Servlet容器(tomcat)将为每个请求创建一个线程,因此每次您在doGet() and doPost()
方法中拥有的内容都将是各个线程的本地。因此,您不需要再次同步this
。所以你的想法是完全错误的。
答案 2 :(得分:0)
是的,您的代码将确保只有一个线程可以进入该块。