A. 线程安全 问题 如何判断一个类是否是线程安全的
servlet是单列的,如果有实例变量的,对它修改就会产生线程安全问题!
打比方多个线程同时对这个变量修改结果就不正确了。sessionfactroy的话一般用threadlocal实现的,一个线程一个sessionfactory,所以线程安全的。session如果当成实列变量的话就是非线程安全了。
反正一句话单列
共享,对其修改就是要考虑线程安全,一半会加锁。至于线程安全的话就是看自己是怎么实现的
B. Java中关于static成员方法的线程安全问题
都同时调用了,怎么还不是多线环境下呢?但是就算是同时调用,如果没有共享变量,有共享变量,但变量是final(引用类型除外)或者是线程安全类(Concurrent包下的,也可以)就不会存在并发问题。
public
class
TestUtil()
{
private
static
int
i
=
0
public
static
int
a
(){
return
i++;//会有并发问题
}
public
static
int
b()
{
int
i
=
0;
return
i++;//不会有并发问题
}
}
方法是否存在并发问题,判断是否有竞态条件就好了
C. 如何判断PHP 是线程安全还是非线程安全的
判断PHP 是线程安全还是非线程安全:
1.通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说应该是ts版,否则是nts版。
2.命令行:php -i|grep -i thread
结果:Thread Safety => disabled 【disabled表示非线程安全】
如果没有grep命令(windows),那就一个个找吧。
D. servlet是不是线程安全的
不是线程安全的,因为它采用多线程方式运行其service方法.也就是说,当多个用户并发访问的时候,可能存在线程交互的问题. 所以我们应该将servlet里写入的同步代码块写上Synchorazid关键字.可是这样就会造成资源的浪费,所以应该尽量减少同步代码块.
E. 怎么判断一个对象是否是线程安全的
Servlet是单列的,如果有实例变量的,对它修改就会产生线程安全问题! 打比方多个线程同时对这个变量修改结果就不正确了。SessionFactroy的话一般用Threadlocal实现的,一个线程一个SessionFactory,所以线程安全的。Session如果当成实列变量的话就是非线程安全了。
反正一句话单列 共享,对其修改就是要考虑线程安全,一半会加锁。至于线程安全的话就是看自己是怎么实现的
F. 如何判断 Java 线程并发的安全性
总的结论:java是线程安全的,即对任何方法(包括静态方法)都可以不考虑线程冲突,但有一个前提,就是不能存在全局变量。如果存在全局变量,则需要使用同步机制。
如下通过一组对比例子从头讲解:
在多线程中使用静态方法会发生什么事?也就是说多线程访问同一个类的static静态方法会发生什么事?是否会发生线程安全问题?
public class Test {
public static void operation(){
// ... do something
}
}
事实证明只要在静态函数中没有处理多线程共享数据,就不存在着多线程访问同一个静态方法会出现资源冲突的问题。下面看一个例子:
public class StaticThread implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
StaticAction.print();
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(new StaticThread()).start();
}
}
}
public class StaticAction {
public static int i = 0;
public static void print() {
int sum = 0;
for (int i = 0; i < 10; i++) {
System.out.print("step " + i + " is running.");
sum += i;
}
if (sum != 45) {
System.out.println("Thread error!");
System.exit(0);
}
System.out.println("sum is " + sum);
G. 怎么判断一个类是否线程安全
线程安全性
类要成为线程安全的,首先必须在单线程环境中有正确的行为。如果一个类实现正确(这是说它符合规格说明的另一种方式),那么没有一种对这个类的对象的操作序列(读或者写公共字段以及调用公共方法)可以让对象处于无效状态,观察到对象处于无效状态、或者违反类的任何不可变量、前置条件或者后置条件的情况。
此外,一个类要成为线程安全的,在被多个线程访问时,不管运行时环境执行这些线程有什么样的时序安排或者交错,它必须仍然有如上所述的正确行为,并且在调用的代码中没有任何额外的同步。其效果就是,在所有线程看来,对于线程安全对象的操作是以固定的、全局一致的顺序发生的。
正确性与线程安全性之间的关系非常类似于在描述 ACID(原子性、一致性、独立性和持久性)事务时使用的一致性与独立性之间的关系:从特定线程的角度看,由不同线程所执行的对象操作是先后(虽然顺序不定)而不是并行执行的。