首页 > 其他 > 详细

设计模式之单例模式读后思考

时间:2017-01-19 19:46:14      阅读:218      评论:0      收藏:0      [点我收藏+]

    上篇:我复习了6大原则, 睡觉前还想了一阵子, 我分析了一下, 想要牢记这些原则, 就必须动手写一些项目

 学习地址 http://www.cnblogs.com/zuoxiaolong/p/pattern2.html

    我记得我学习6大原则看了一个月, 这次这个单例模式 只看了4天, 有一点推动力感觉还是可以的

    我自己的理解:

    单例模式,原文: 指的是一个类在整个应用中, 有且只有一种状态.

        本人理解: 类只有一个, 所有调用者拿到的都是这个类, 调用者的修改是阻塞的, 调用者的查询是非阻塞的,

        单例模的应用场景基本都是在是可变共享

    原文中有个让cpu飙升的测试单例的方法, TestSinglenton 这个测试方法 ,主要问题出在lock这个变量上, 在前面加上volatile这个变量, 保证可见性,

其实加了volatile cpu也会飙升, 但是结果可以及时打印出来

    但是没加的话结果卡住,原因是什么,lock这个变量没有了可见性, 我推断lock.isLock()一直拿的是false, 所有的子线程一直没有获取到新的lock导致一直在循环

这时我就有个疑问了, 理论上在主线程我们改变lock的值, 但是这里显然, 子线程依然没有获取到我们想要的那个值, 难道说, lock之前的值依然没有被gc掉 

我加了一小段代码检验的一番

while (true) {
System.out.println("----"+lock.isLock()+"1------");
System.out.println("----"+lock.isLock()+"2------");
System.out.println("----"+lock.isLock()+"3------");

.....
}

    结果,很震惊, 同一个线程下取到的lock值居然不一样, 并且 lock1总是初始值 lock3的数量>lock2, 这里感觉像 线程看着lock的值从true变成false 

    技术分享

    一个渐渐变化的过程,  等看完jvm再详细分析一波

 

设计模式之单例模式读后思考

原文:http://www.cnblogs.com/denghailei/p/6288598.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!