package com.freeflying.thread.base;
/**
* @ClassName: ThreadNotSafe
* @Description:非线程安全的问题
* @author freeflying
* @date 2018年6月22日
*/
public class ThreadNotSafe {
public static void main(String[] args) {
ALogin aLogin=new ALogin();
aLogin.start();
BLogin bLogin=new BLogin();
bLogin.start();
}
}
class Login{
private static String usernameR;
private static String passwordR;
public static void doPost(String username,String password) {
try {
usernameR=username;
if("a".equals(username)) {
Thread.sleep(5000);
}
passwordR=password;
System.out.println("username="+usernameR+" password="+passwordR);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* @ClassName: ALogin
* @Description:线程A
* @author freeflying
* @date 2018年6月22日
*/
class ALogin extends Thread{
@Override
public void run() {
Login.doPost("a", "aa");
}
}
/**
* @ClassName: BLogin
* @Description:线程B
* @author freeflying
* @date 2018年6月22日
*/
class BLogin extends Thread{
@Override
public void run() {
Login.doPost("b", "bb");
}
}
结果:
username=b password=bb
username=b password=aa
总结:非线程安全问题主要是多个线程对同一个对象中的同一个实例进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。通过在doPost方法上加上synchronized关键字来解决线程不安全的问题