A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秋天中の夏季 中级黑马   /  2015-8-21 20:51  /  475 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、导致安全问题的出现的原因:
        当多条语句在操作同一线程共享数据时,一个线程对多条语句只执行了一部分,还没用执行完,另一个线程参与进来执行。导致共享数据的错误。
简单的说就两点:
        a、多个线程访问出现延迟。
        b、线程随机性    。
注:线程安全问题在理想状态下,不容易出现,但一旦出现对软件的影响是非常大的。
2、解决办法
基本思想:让程序没有安全问题的环境。
       把多个语句操作共享数据的代码给锁起来,让任意时刻只能有一个线程执行即可。
        在java中对于多线程的安全问题提供了专业的解决方式——synchronized(同步)
        同步代码块
        格式:
                synchronized(对象){需要同步的代码;}
同步可以解决安全问题的根本原因就在那个对象上。该对象如同锁的功能。持有锁的线程可以在同步中执行。没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。
同步的前提:
1、必须要有两个或者以上的线程。
2、必须是多个线程使用同一个锁。

必须保证同步中只能有一个线程在进行

好处:解决了多线程的安全问题
弊端:对锁进行判断,较为消耗资源(在允许消耗范围内),

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马