天天看點

關于Servlet的線程安全問題(一)

在寫Servlet需要注意線程的安全問題。

Person類

package top.cheungchingyin.thread;

public class Person {

    public int age;

}
           

Demo類

package top.cheungchingyin.thread;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Demo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            Person p = new Person();
            p.age++;
            System.out.println(p.age);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           
    }
}
           

當我在Demo類裡面通路Person類時,需要new一個新的對象,當doGet方法執行完後則會把對象釋放,回收記憶體,是以無論怎樣并發通路也不會出現安全問題,更不會記憶體洩露。可是如果當我的Person類是一個靜态類,由于靜态類在JVM虛拟機裡面起動時便會放入記憶體中,當伺服器啟動,不斷地通路Person靜态類,則會容易記憶體洩露。是以使用靜态類的時候需要特别小心,使用完後記得釋放記憶體。或者可以使用synchronized方法進行線程同步。

繼續閱讀