三层框架开发时,什么时候会出现多线程安全问题

如题,三层框架开发时,什么时候会出现多线程安全问题?

这也是困扰了我很长时间的一个问题,在花一段时间了解多线程后,对采用三层框架开发的企业级应用的线程安全问题进行了思考,

并进行总结,如有不当之处恳请指正:

1、mvc框架采用struts2,由于action可以配置成多实例,所以action不存在现成安全问题,action中的数据是存在actionContext中的,

而actionContext是存在ThreadLocal中,与当前线程进行了绑定,每一个线程来了,struts2框架都会创建一个action实例,

每个线程都有一个action,采用空间换时间的方式换取线程安全,故数据是线程安全的

2、action中引用的service可能存在线程安全问题,因为service一般都是单例的,这时候就出现多个action或同一个action的多实例

引用service,但是只要保证service中没有成员变量,即使多个action实例引用service对象,也不会有线程安全问题,

但是问题又来了:

问题:一般我们的工具类都是静态的,假如action中使用了一个静态的工具类操作数据,当有多个线程访问该action时,就出现了

多个线程操作一个静态类的静态方法的情况,这时候就会出现线程安全问题,为了保证静态工具类静态方法中的共享数据的安全,我们可以对静态方法

加上synchronized的标识,这样就能确保多个线程操作共享数据时的线程安全问题,但是这样的话,被加上synchronized关键字的方法的性能

就很差了,每个线程调用该方法都需要排队,这时候我们可以使用jdk1.5提供的新特性,给该方法上读写锁,读和读不互斥,

写和写互斥,读和写互斥

 

你可能感兴趣的:(架构)