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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高境   /  2013-3-3 13:20  /  102155 人查看  /  4684 人回复  /   10 人收藏 转载请遵从CC协议 禁止商业使用本文

签到第9天
回复 使用道具 举报
签到开工了
回复 使用道具 举报
晚上签到
回复 使用道具 举报
签到第十五天2013年3月18日22:20:43
回复 使用道具 举报
再来一次啊
回复 使用道具 举报
第十五天签到...上课好累喔,但还是要坚持..
回复 使用道具 举报
签到   
回复 使用道具 举报
{:soso_e113:}
回复 使用道具 举报
第8 天晚上,签到,
回复 使用道具 举报
第16天签到 继续努力继续加油
回复 使用道具 举报
第十一天签到
回复 使用道具 举报
3.18===加油啊 签到啊
回复 使用道具 举报
签到第十五天,集合零碎真多
回复 使用道具 举报
第一天签到
回复 使用道具 举报
第十五天【学习进度】:今天看了多线程安全部分,明天复习一下,开始下阶段。
第十五天【心得总结】:多线程的运行出现了安全问题
问题愿意:
当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行
完,另一个线程参与进来执行,导致共享数据的错误。

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

        java对多线程的安全问题提供了专业的解决方式。
        1.同步代码块。
        synchronized(对象)
        {
                需要被同步的代码
        }
        对象如同锁,持有锁的线程可以在同步中执行。
        没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。
        2.同步函数,在需要加锁的函数前加修饰符synchronized,
                同步函数的锁是this
3.。如果同步函数被静态修饰后,使用的锁是什么呢?
        通过验证,发现不再是this,因为静态方法中不可以定义this
         静态进内存时,内存中没有类对象,但是一定有该类对应的字节码文件对象,
         类名.class.该对象的类型是Class
        结论:静态的同步方法,使用的是锁是该方法所在类的字节码文件对象:类名.class

同步的前提:
1.必须要有两个或两个以上的线程。
2.必须是多个线程使用同一锁。

必须保证同步中只能有一个线程在执行。
好处:解决了多线程的安全问题

弊端;多个线程需要判断锁,较为消耗资源。
回复 使用道具 举报
支持支持
回复 使用道具 举报
菜鸟,签到。
回复 使用道具 举报
签到,第十一天。
回复 使用道具 举报
3.19     第十五天签到
回复 使用道具 举报
第三天咯!继续努力
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马