熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

java的線程安全四種方式五個等級

2022-06-13   來源: Java高級技術 

  四種方式 sychronized關鍵字
  sychronized method(){}
  sychronized (objectReference) {/*block*/}
  static synchronized method(){}
  sychronized(classnameclass)
  其中是代表鎖當前對象即一個對象就一個鎖代表鎖這個類即這個類的鎖
  要注意的是sychronized method()不是鎖這個函數而是鎖對象如果這個類中有兩個方法都是sychronized那麼只要有兩個線程共享一個該類的reference每個調用這兩個方法之一不管是否同一個方法都會用這個對象鎖進行同步鎖類的類推即該類的不同reference調用了sychronized區段的咚咚就會受類鎖的控制
  
  還有如果兩個函數調用的先後順序不能被打斷那麼可以有個專門的鎖對象來完成這個任務
  class MyLock
  {
     synchronized getLock()
     {
       //####還沒寫完
     }
  }
  
  五個等級  參見effective java Item Document thread safety
  
  immutable  不可變對象
  threadsafe 線程安全的可以放心使用如javautilTimer
  conditionally threadsafe 條件線程安全的如Vector和Hashtable一般是安全的除非存在幾個方法調用之間的順序不能被打斷這時可以用額外的鎖來完成
  threadcompatible 可以使用synchronized (objectReference)來協助完成對線程的調用
  threadhostile 不安全的
  
  wait & notifyAll
  
  在循環中使用wait 使用notifyAll而不是notify
  
  pipe
  
  java中也有pipe的四個類PipedInputStream PipedInputReader PipedOutputStream PipedOutputWriter 下面是一段生產者消費者的代碼(摘自core javaII)
  
    /* set up pipes */
    PipedOutputStream pout = new PipedOutputStream();
    PipedInputStream pin = new PipedInputStream(pout);
    PipedOutputStream pout = new PipedOutputStream();
    PipedInputStream pin = new PipedInputStream(pout);
    /* construct threads */
    Producer prod = new Producer(pout);
    Filter filt = new Filter(pin pout);
    Consumer cons = new Consumer(pin);
    /* start threads */
    prodstart(); filtstart(); consstart();
  

From:http://tw.wingwit.com/Article/program/Java/gj/201311/27306.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.