美文网首页
多线程线程安全

多线程线程安全

作者: 迷糊小生 | 来源:发表于2019-03-23 13:39 被阅读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都属于类变量,因此当两个线程同时启动后其值会发生改变,由此造成了结果的错乱。

    相关文章

      网友评论

          本文标题:多线程线程安全

          本文链接:https://www.haomeiwen.com/subject/pdijvqtx.html