几种特殊的多线程函数
2015-07-17 16:56
344 查看
静态
如果同步函数被静态修饰后,使用的锁是什么呢?
通过验证,发现不是this
因为静态方法中不可以定义this
静态进内存时,内存中没有本类对象,但是一定有给类对应的字节码文件对象。
类名:class 该对象的类型时Class
单例设计模式
饿汉式
这个不会出现安全问题;
懒汉式
当有多线程时,在调用的方法中出现多条语句 ,就有可能出现安全问题
解决
面试时注意
懒汉式与饿汉式有什么不同?
懒汉式特点在于延迟加载;
懒汉式在延迟加载时有没有问题?怎么解决?
有,在多线程访问时会出现安全问题;
可以加同步解决,用同步函数与同步代码块都可以,但是效率低效;所以我们用双重判断来解决效率问题;
加同步是用的锁是给类所属的字节码文件对象;
一般面试都会问
请写一个延迟加载的单例设计模式示例;
这时一定要写加同步的代码;
如果同步函数被静态修饰后,使用的锁是什么呢?
通过验证,发现不是this
因为静态方法中不可以定义this
静态进内存时,内存中没有本类对象,但是一定有给类对应的字节码文件对象。
类名:class 该对象的类型时Class
class Ticket implements Runnable { private int tick=100; public void run() { synchronized(Ticket.class) { while(true) { if(tick>0) { System.out.println("tick..."+tick--); } } } } } class StaticDemo { public static void main(String[] args) { Ticket c=new Ticket(); Thread t1=new Thread(c); Thread t2=new Thread(c); t1.start(); t2.start(); } }
单例设计模式
饿汉式
class Single { private static Single s= null; private Single(){} public static Single getInstance() { if(s==null) s=new Single(); return s; } }
这个不会出现安全问题;
懒汉式
class Single { private static Single s= null; private Single(){} public static Single getInstance() { if(s==null) s=new Single(); return s; } }
当有多线程时,在调用的方法中出现多条语句 ,就有可能出现安全问题
解决
class Single { private static Single s= null; private Single(){} public static Single getInstance() { if(s==null) { synchronized(Single.class) { if(s==null) s=new Single(); return s; } } } }
面试时注意
懒汉式与饿汉式有什么不同?
懒汉式特点在于延迟加载;
懒汉式在延迟加载时有没有问题?怎么解决?
有,在多线程访问时会出现安全问题;
可以加同步解决,用同步函数与同步代码块都可以,但是效率低效;所以我们用双重判断来解决效率问题;
加同步是用的锁是给类所属的字节码文件对象;
一般面试都会问
请写一个延迟加载的单例设计模式示例;
这时一定要写加同步的代码;
相关文章推荐
- 尚未解决的问题----到底什么是文件描述符???其本质是什么???
- 【Lua正则表达式】解析匹配优酷电视剧集的下载地址用来批量下载
- Linux中断(interrupt)子系统之四:驱动程序接口层 & 中断通用逻辑层
- xcode7 beta 真机调试错误 Could not find Developer Disk Image
- SEAndroid和普通android的区别
- Tom数
- JS代码格式化修改表格的数值的格式
- spring mvc 初始化过程
- Spring jar包详解
- 从零开始学swift(六)-iOS之做一款简单app
- Linux中断(interrupt)子系统之三:中断流控处理层
- 字符串反序列化成类的两种方法
- Web API (一)
- 1252 - Twenty Questions
- Spark+Python lab1
- SQL中EXISTS的用法
- BFS学习 Codeforces 301_div.2_Ice Cave
- BFS学习 Codeforces 301_div.2_Ice Cave
- 将DBGrid中的数据导出到Word
- Android 吸入动画效果详解(仿mac退出效果)