[转]Java线程安全四种方式五个等级
来源:互联网 发布:js两个日期相差天数 编辑:程序博客网 时间:2024/05/17 08:56
Java线程安全四种方式五个等级 四种方式 sychronized关键字 字串4 sychronized method(){} 字串3 sychronized (objectReference) {/*block*/} 字串1 static synchronized method(){} 字串8 sychronized(classname.class) 字串1 其中1和2是代表锁当前对象,即一个对象就一个锁,3和4代表锁这个类,即这个类锁 字串5 要注意是sychronized method()不是锁这个函数,而是锁对象,即:如果这个类中有两个方法都是sychronized,那么只要有两个线程共享一个该类reference,每个调用这两个方法之一,不管是否同一个方法,都会用这个对象锁进行同步。锁类3和4类推,即该类不同reference调用了sychronized区段咚咚就会受类锁控制 字串2 还有,如果两个函数调用先后顺序不能被打断,那么可以有个专门锁对象来完成这个任务: 字串3 class MyLock { synchronized getLock() { //####还没写完 } } 字串6 五个等级 参见effective java Item 52 : Document thread safety 字串7 immutable 不可变对象 字串9 thread-safe 线程安全,可以放心使用,如java.util.Timer 字串7 conditionally thread-safe 条件线程安全,如Vector和Hashtable,一般是安全,除非存在几个方法调用之间顺序不能被打断,这时可以用额外锁来完成 字串9 thread-compatible 可以使用synchronized (objectReference)来协助完成对线程调用 字串4 thread-hostile 不安全 字串2 wait & notifyAll 字串8 在循环中使用wait 使用notifyAll而不是notify 字串1 pipe 字串8 java中也有pipe,四个类:PipedInputStream, PipedInputReader, PipedOutputStream, PipedOutputWriter 下面是一段生产者消费者代码(摘自core javaII): 字串8 /* set up pipes */ PipedOutputStream pout1 = new PipedOutputStream(); PipedInputStream pin1 = new PipedInputStream(pout1); PipedOutputStream pout2 = new PipedOutputStream(); PipedInputStream pin2 = new PipedInputStream(pout2); /* construct threads */ Producer prod = new Producer(pout1); Filter filt = new Filter(pin1, pout2); Consumer cons = new Consumer(pin2); /* start threads */ prod.start(); filt.start(); cons.start(); 字串7 本文来自: 我要研发网(http://www.51dev.com) 详细出处参考:http://51dev.com/program/java/1/20070818/10258.html
- [转]Java线程安全四种方式五个等级
- java 线程安全等级
- java创建线程的四种方式
- Java 线程池 四种创建方式
- java生成线程的四种方式
- java创建线程的四种方式
- Java线程安全-同步方式
- java 线程运行等级
- java保证线程安全的两种方式
- java多线程详解四线程安全集合
- Java多线程线程安全实现方式
- java 线程安全的实现方式
- java并发——四种创建线程方式
- java实现线程间通信的四种方式
- java线程池的四种创建方式
- 线程同步四种方式
- 黑马程序员--Java学习笔记之多线程(自定义线程的两种方式对比、线程状态、线程安全)
- Java处理线程同步/线程安全的方式概述
- 超高人气机型 诺基亚N78手机图赏及评测
- 必知的 Cmd 命令
- COBOL 式死亡 Java 是否真的即将被取代?
- SQL操作全集
- 只允许数字
- [转]Java线程安全四种方式五个等级
- 常用的JS代码 收藏
- 在C#中利用Excel做高级报表
- UltraWinTabbedMdi及UltraToolbarsManager的部分汉化代码
- Asp 常用函数
- C# rss 入门
- 如何学习linux
- C#与EXCEL的数据交互
- .net3.5 和vs2008中Ajax控件的使用--AlwaysVisibleControl控件