• java 多线程安全问题


    导致安全问题的出现的原因:

    多个线程访问出现延迟。

    线程随机性。

    注:线程安全问题在理想状态下,不容易出现,但一旦出现对软件的影响是非常大的。

    我们可以通过Thread.sleep(long time)方法来简单模拟延迟情况。

    我的总结:

    当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。

     

    解决办法:

    对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。

    Eg:在前面的卖票例子上,在每卖票的前面加上模拟延时的语句!

    package july7;

    class SellDemo implements Runnable{

        private int num = 50;

        @Override

        public void run() {

            for (int i = 0; i < 200; i++) {

           

                    if(num > 0){ 

                        try {

                        //因为它不可以直接调用getName()方法,所以必须要获取当前线程。

                            Thread.sleep(10);

                        } catch (InterruptedException e) {

                            e.printStackTrace();

                        }

                    System.out.println(Thread.currentThread().getName()+"卖出第"+num--+"张票!");

                }

            }

        }

    }

    public class Demo3 {

        public static void main(String[] args) {

            SellDemo s = new SellDemo();

            new Thread(s,"A").start();

            new Thread(s,"B").start();

            new Thread(s,"C").start();

        }

    }

    输出:这样的话,会出现买了第0,甚至-1张票的情况!

  • 相关阅读:
    scrapy 链接数据库创表语句
    工作问题总结
    插入排序
    centos6.5 安装python2.7.5
    冒泡排序
    [Python笔记]第十篇:模块续
    [Python笔记]第九篇:re正则表达式
    [Python笔记]第八篇:模块
    [Python笔记]第六篇:文件处理
    [Python笔记]第五篇:递归
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11132347.html
Copyright © 2020-2023  润新知