multithreading中的静态变量
I found that declaring a variable as static makes no sense
在multithreading中 I found that declaring a variable as static makes no sense
。 我认为,这是因为every thread has its own stack
。 这是唯一的原因吗?
我知道static variables should be used within synchronized block
。 但为什么?
静态在multithreading中毫无意义。
我担心你正在做出相反的声明 。 静态变量是一种共享资源,可用于在不同线程之间交换一些信息。 我们在访问这样的共享资源时需要小心。 因此,我们需要确保在multithreading环境中对静态变量的访问是同步的。
每个线程都有自己的堆栈
这是一个正确的陈述。 Each thread has its own stack but they share the process heap.
堆栈仅包含局部变量,而不包含堆上的变量。 静态变量存储在堆的PermGen
部分中,因此应该很好地保护对它们的访问。
因为问题的第一部分已经回答,我将尝试回答第二个问题。
我知道静态变量应该在synchronized块中使用。 但为什么?
因为如果不使用primefaces ,那么带变量的操作不是primefaces的。 这就是为什么你应该在使用它们时阻止变量。 但在现实世界中,您可以使用volatile关键字,这将保证线程将具有变量的实际值。
如果在multithreading环境中更改变量,则新值可能不会因为可能被缓存而不可访问。 当然,静态变量也是如此。 如果您不使用同步块,则可以考虑使用volatile
。 这也将保证各个线程获得更新的副本,而无需同步。 volatile
足够四,您的应用程序取决于您的要求。
将volatile
添加到静态声明中。
volatile
将保证任何其他线程都能看到变量的最新值。 因此,有了挥发性,它将是有道理的。
但是, volatile
不会保证primefaces性。 如果从多个线程写入变量,则可能需要使用primefaces或synchronize
块。
我认为volatile
很好。