如何避免非线性安全?
1。概念
1)实例变量
实例变量是在堆中分配的,并被属于该实例的所有线程共享,所以不是线程安全的. |
(2)JSP系统提供的8个类变量 |
JSP中用到的OUT,REQUEST,RESPONSE,SESSION,CONFIG,PAGE,PAGECONXT是线程安全的,APPLICATION在整个系统内被使用,所以不是线程安全 的. |
(3)局部变量 |
局部变量在堆栈中分配,因为每个线程都有它自己的堆栈空间,所以是线程安全的. |
(4)静态类 |
静态类不用被实例化,就可直接使用,也不是线程安全的. |
(5)外部资源: |
在程序中可能会有多个线程或进程同时操作同一个资源(如:多个线程或进程同时对一个文件进行写操作).此时也要注意同步问题. 2。解决办法 |
(1)采用单线程方式 |
在该JSP文件中加上: <%@ page isThreadSafe="false" %>,使它以单线程方式执行,这时,仍然只有一个实例,所有客户端的请求以串行方 式执行。这样会降低系统的性能. |
(2)对函数加synchronized进行线程同步,该JSP仍然以多线程方式执行,但也会降低系统的性能.
|