非线程安全:
主要是指多个线程对同一个对象中的同一个实例变量进行进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。
代码示例:
//非线程安全实例
class LoginServlet{ //本类模拟一个Servlet组件
private static String usernameRef;
private static String passwordRef;
synchronized public static void doPost(String username,String password){
try{
usernameRef = username;
if(username.equals("a")){
Thread.sleep(5000);
}
passwordRef = password;
System.out.println("username= " + usernameRef +" password = " + password);
}catch(InterruptedException e){
e.printStackTrace();
}
} //非线程安全运行结果:输出结果不匹配
//解决办法,在doPost方法前加关键字synchronized,给方法doPost加锁
} //LoginServlet 结束
class ALogin extends Thread{
@Override
public void run(){
LoginServlet.doPost("a","a_password");
}
} //ALogin 结束
class BLogin extends Thread{
@Override
public void run(){
LoginServlet.doPost("b","b_password");
}
} //BLogin 结束
public class Thread_LoginServlet{
public static void main(String [] args){
ALogin a=new ALogin();
BLogin b=new BLogin();
a.start();
b.start();
}
} //Thread_LoginServlet 结束 (main方法)