并不是只要加了锁就是安全(互斥)的
来源:互联网 发布:mdf ldf 还原数据库 编辑:程序博客网 时间:2024/04/30 15:03
public class ThreadSafeDemo {public static void main(String[] args) {// TODO Auto-generated method stubnew ThreadSafeDemo().init(); }public void init(){ final Outputer op = new Outputer();new Thread(new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stubwhile(true){op.output1("yinhang");}}}).start();new Thread(new Runnable(){public void run(){while(true){op.output2("zhuanzhang");}}}).start();}static class Outputer{public synchronized void output1(String name){int len = name.length();for(int i=0;i<len;i++){System.out.print(name.charAt(i)); }System.out.println();}public void output2(String name){synchronized(this){ int len = name.length();for(int i=0;i<len;i++){System.out.print(name.charAt(i)); }System.out.println();}}public static void output3(String name){synchronized(Outputer.class){ int len = name.length();for(int i=0;i<len;i++){System.out.print(name.charAt(i)); }System.out.println();}}public static synchronized void output4(String name){int len = name.length();for(int i=0;i<len;i++){System.out.print(name.charAt(i)); }System.out.println();}}}
其中,output1()和output2()是线程安全的;
output3()和output4()是线程安全的;
Note:并不是只要加了锁就是安全(互斥)的!! 只有满足加的那把锁(latch,门闩)一定是同一个对象时才是线程安全的!!
用synchronized修饰非static方法等同于synchronized(this){};
用synchronized修饰static方法等同于synchronized(xxx.class);
因为static会编译成字节码,xxx.class也是字节码,为同一个对象!
0 0
- 并不是只要加了锁就是安全(互斥)的
- 【容斥(其实并不是)】【USACO】数三角形
- 为什么说飞机并不是最安全的交通工具?
- C语言和设计模式(-)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(之原型模式)【文章都是来自网络,只要自己吸取了就是自己的】 .
- C语言和设计模式(之组合模式)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(之模板模式)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(工厂模式)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(责任链模式)【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(抽象工厂模式)【文章都是来自网络,只要自己吸取了就是自己的】 .
- C语言和设计模式(迭代器模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(外观模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(代理模式) .【文章都是来自网络,只要自己吸取了就是自己的】 .
- C语言和设计模式(享元模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(装饰模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(适配器模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(策略模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- C语言和设计模式(中介者模式) 【文章都是来自网络,只要自己吸取了就是自己的】
- Java之装饰模式(Decorator Pattern)
- 如何在 Git 里撤销(几乎)任何操作
- 《MATLAB在语音信号分析和合成中的应用》随书附带程序下载 程序打不开
- Mathematica
- datatables如何获取当前page的数据的条数以及datables的一些有用的事件
- 并不是只要加了锁就是安全(互斥)的
- android基础之Activity几个面试题
- 犀牛——第6章对象 6.7属性的特性
- Android 中Junit 测试框架(单元测试)
- "早餐佳"步伐太快扯到蛋了?
- 纯js评星插件
- Java之命令模式(Command Pattern)
- 构建亿级前端读服务
- MapReduce 的进一步了解(一)