几种特殊的多线程函数
来源:互联网 发布:java定时执行任务 编辑:程序博客网 时间:2024/05/16 15:02
静态
如果同步函数被静态修饰后,使用的锁是什么呢?
通过验证,发现不是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;}}}}
面试时注意
懒汉式与饿汉式有什么不同?
懒汉式特点在于延迟加载;
懒汉式在延迟加载时有没有问题?怎么解决?
有,在多线程访问时会出现安全问题;
可以加同步解决,用同步函数与同步代码块都可以,但是效率低效;所以我们用双重判断来解决效率问题;
加同步是用的锁是给类所属的字节码文件对象;
一般面试都会问
请写一个延迟加载的单例设计模式示例;
这时一定要写加同步的代码;
0 0
- 几种特殊的多线程函数
- javascript几种特殊的函数
- JavaScript 函数与变量的几种特殊情况
- Listview的几种特殊的属性
- It的几种特殊用法二
- It的几种特殊用法二
- 几种特殊的生成树
- 几种特殊时间格式的写法
- 前端的几种特殊样式
- 几种特殊的生成树
- 三极管的几种特殊用途
- 宏的几种特殊用法
- listView的几种特殊属性
- css2的几种特殊选择器
- 输出几种常见的特殊整数
- ListView的几种特殊属性
- 几种特殊的IPV4地址
- 几种特殊的平面射影变换
- 浅谈Linux下Java运行环境的建立
- html 学习
- int 和 Integer 的区别与作用
- 尚未解决的问题----到底什么是文件描述符???其本质是什么???
- xcode7 beta 真机调试错误 Could not find Developer Disk Image
- 几种特殊的多线程函数
- SEAndroid和普通android的区别
- zookeeper应用场景
- Piggy-Bank hdu-1114
- oracle操作一些常识
- Linux中断(interrupt)子系统之五:软件中断(softIRQ)
- GRE写作必备句型
- ubuntu下宽带连接
- wifi连接adb