其中1和2是代表鎖當(dāng)前對(duì)象,即一個(gè)對(duì)象就一個(gè)鎖,3和4代表鎖這個(gè)類,即這個(gè)類的鎖
要注重的是sychronized method()不是鎖這個(gè)函數(shù),而是鎖對(duì)象,即:假如這個(gè)類中有兩個(gè)方法都是sychronized,那么只要有兩個(gè)線程共享一個(gè)該類的reference,每個(gè)調(diào)用這兩個(gè)方法之一,不管是否同一個(gè)方法,都會(huì)用這個(gè)對(duì)象鎖進(jìn)行同步。鎖類的3和4類推,即該類的不同reference調(diào)用了sychronized區(qū)段的咚咚就會(huì)受類鎖的控制
還有,假如兩個(gè)函數(shù)調(diào)用的先后順序不能被打斷,那么可以有個(gè)專門的鎖對(duì)象來(lái)完成這個(gè)任務(wù):
class MyLock
{
      synchronized getLock()
      {
          //####還沒(méi)寫完
      }
}
java中也有pipe的,四個(gè)類:PipedInputStream, PipedInputReader, PipedOutputStream, PipedOutputWriter 下面是一段生產(chǎn)者消費(fèi)者的代碼(摘自core javaII):
    /* 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(); 
volatile 要害字是 Java 語(yǔ)言為優(yōu)化編譯器設(shè)計(jì)的。以下面的代碼為例:新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注