Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet线程访问控件_Java_Multithreading_Servlets - Fatal编程技术网

Java servlet线程访问控件

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

由调用的servlet方法中的好友 dopost/doget我都有一个代码

synchronized (this) 
{
String filePath="E:\\FSPATH1\\2KL06CS048\\";
System.out.println("Directory Created   ????????????"+new File(filePath).mkdir());
}
因此,上述servlet的多个线程可以一次输入上述代码块,也可以不输入


但Servlet生命周期的概念是,只有一个Servlet实例,对于该Servlet的每个请求,在该实例上创建一个线程

实际上我的要求是

  • 发出请求(servlet调用,该servlet的任务是在服务器中创建目录)
  • 从servlet调用返回后,我将重命名创建的目录
  • 在重命名时,另一个线程不能创建相同的目录并修改目录的内容,因为我想同步servlet中的代码
  • 确保一次只能有一个线程执行封闭块 时间

    还有几点:

  • synchronized关键字可以应用于方法或语句块,并为一次只能由一个线程执行的关键部分提供保护

  • synchronized关键字防止一次由多个线程执行代码的关键部分

  • 当应用于静态方法时,整个类在每次由一个线程执行该方法时被锁定

  • 当应用于实例方法时,实例在一次被一个线程访问时被锁定

  • 当应用于对象或数组时,对象或数组被锁定,而关联的代码块一次由一个线程执行


  • 请注意,每个语句一次以一个线程结束。是的,您的代码将确保只有一个线程可以进入块。

    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中的代码。