多线程线程安全

2019-03-23  本文已影响0人  迷糊小生

非线程安全主要指多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。


/**
 * 线程不安全
 * @author xml
 *
 */
public class NoThreadSafe {

    private static String userName;
    
    private static String passWard;
    
    /**
     * 模拟Selvet
     */
    public static void doPost(String userNameRef,String passWardRef) {
        try {
            userName = userNameRef;
            if(userName.equals("aaa")) {
                Thread.sleep(1000);
            }
            passWard = passWardRef;
            System.out.println("userName:" + userName + "----" + "passWard:" + passWard);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
}

public class ThreadTestA extends Thread{

    @Override
    public void run() {
        NoThreadSafe.doPost("aaa", "aaa");
    }
}

public class ThreadTestB extends Thread{

    @Override
    public void run() {
        NoThreadSafe.doPost("bbb", "bbb");
    }
}

public class Test {
    public static void main(String[] args) {
        ThreadTestA aaa = new ThreadTestA();
        aaa.start();
        ThreadTestB bbb = new ThreadTestB();
        bbb.start();
    }
}
image.png image.png

由于userName,passWard都属于类变量,因此当两个线程同时启动后其值会发生改变,由此造成了结果的错乱。

上一篇下一篇

猜你喜欢

热点阅读