[转]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
原创粉丝点击