Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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中的AsyncContext启动的Runnable线程是否安全?_Java_Multithreading_Jakarta Ee_Servlets_Asynchronous - Fatal编程技术网

Java Servlet中的AsyncContext启动的Runnable线程是否安全?

Java Servlet中的AsyncContext启动的Runnable线程是否安全?,java,multithreading,jakarta-ee,servlets,asynchronous,Java,Multithreading,Jakarta Ee,Servlets,Asynchronous,我几乎可以肯定,但最好弄清楚这一点:如果在servlet请求的AsyncContext中启动了Runnable,那么run方法中的代码是线程安全的吗?我想是的。因为每个线程都有一个新的Runnable,不是吗?有人能澄清这个问题吗?没有任何Java代码,除非以这种方式显式编写,否则本质上是线程安全的AsyncContext公开接受Runnable值的start(Runnable)方法。如果您有一个Runnable实例,并将其作为参数传递给start(…),然后在其他线程中重复使用,则其线程安全性

我几乎可以肯定,但最好弄清楚这一点:如果在servlet请求的
AsyncContext
中启动了
Runnable
,那么run方法中的代码是线程安全的吗?我想是的。因为每个线程都有一个新的
Runnable
,不是吗?有人能澄清这个问题吗?

没有任何Java代码,除非以这种方式显式编写,否则本质上是线程安全的
AsyncContext
公开接受
Runnable
值的
start(Runnable)
方法。如果您有一个
Runnable
实例,并将其作为参数传递给
start(…)
,然后在其他线程中重复使用,则其线程安全性可能会受到影响

更重要的是,如果你的
Runnable
被初始化为与你的应用程序的其他部分共享的状态,那么它的线程安全性将再次不确定


关键在于你如何管理它

没有任何Java代码,除非以这种方式显式编写,否则本质上是线程安全的
AsyncContext
公开接受
Runnable
值的
start(Runnable)
方法。如果您有一个
Runnable
实例,并将其作为参数传递给
start(…)
,然后在其他线程中重复使用,则其线程安全性可能会受到影响

更重要的是,如果你的
Runnable
被初始化为与你的应用程序的其他部分共享的状态,那么它的线程安全性将再次不确定


关键在于你如何管理它

没有任何Java代码,除非以这种方式显式编写,否则本质上是线程安全的
AsyncContext
公开接受
Runnable
值的
start(Runnable)
方法。如果您有一个
Runnable
实例,并将其作为参数传递给
start(…)
,然后在其他线程中重复使用,则其线程安全性可能会受到影响

更重要的是,如果你的
Runnable
被初始化为与你的应用程序的其他部分共享的状态,那么它的线程安全性将再次不确定


关键在于你如何管理它

没有任何Java代码,除非以这种方式显式编写,否则本质上是线程安全的
AsyncContext
公开接受
Runnable
值的
start(Runnable)
方法。如果您有一个
Runnable
实例,并将其作为参数传递给
start(…)
,然后在其他线程中重复使用,则其线程安全性可能会受到影响

更重要的是,如果你的
Runnable
被初始化为与你的应用程序的其他部分共享的状态,那么它的线程安全性将再次不确定


关键在于你如何管理它

如果它使用共享内存中的某些内容,例如所有线程都可用的
List
,那么它可能不是线程安全的。@Luiggi:是的,你是对的,我假设没有使用共享资源。@Sotirios:你用Runnable启动AsyncContext。如果它使用共享内存中的某些内容,例如所有线程都可用的
List
,那么它可能不是线程安全的。@Luiggi:是的,你是对的,我假设没有使用共享资源。@Sotirios:你用Runnable启动AsyncContext。如果它消耗共享内存中的某些内容,例如所有线程都可用的
列表,那么它可能不是线程安全的。@Luiggi:是的,你是对的,我假设没有使用共享资源。@Sotirios:您使用Runnable启动AsyncContext。如果它消耗共享内存中的某些内容,例如所有线程都可用的
列表,那么它可能不是线程安全的。@Luiggi:是的,您是对的,我假设没有使用共享资源。@Sotirios:您使用Runnable启动AsyncContext。您完全正确。我的问题是因为servlet总是跨线程重用,而Runnable是根据每个请求创建的(如果您没有明确决定重用它)。但是,是的,如果我在所有这些可运行程序中都有一个共享状态,我会遇到与servlet相同的问题。我的问题是因为servlet总是跨线程重用,而Runnable是根据每个请求创建的(如果您没有明确决定重用它)。但是,是的,如果我在所有这些可运行程序中都有一个共享状态,我会遇到与servlet相同的问题。我的问题是因为servlet总是跨线程重用,而Runnable是根据每个请求创建的(如果您没有明确决定重用它)。但是,是的,如果我在所有这些可运行程序中都有一个共享状态,我会遇到与servlet相同的问题。我的问题是因为servlet总是跨线程重用,而Runnable是根据每个请求创建的(如果您没有明确决定重用它)。但是,是的,如果我在所有这些可运行程序中都有一个共享状态,我会遇到与servlet相同的问题。