锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品无码国产片,亚洲va在线va天堂va四虎 ,亚洲熟妇无码av另类vr影视http://m.tkk7.com/freeman1984/category/49019.html STANDING ON THE SHOULDERS OF GIANTSzh-cnWed, 19 Oct 2011 11:28:06 GMTWed, 19 Oct 2011 11:28:06 GMT60Condition http://m.tkk7.com/freeman1984/archive/2011/10/17/361462.html@joe@joeMon, 17 Oct 2011 09:28:00 GMThttp://m.tkk7.com/freeman1984/archive/2011/10/17/361462.htmlhttp://m.tkk7.com/freeman1984/comments/361462.htmlhttp://m.tkk7.com/freeman1984/archive/2011/10/17/361462.html#Feedback0http://m.tkk7.com/freeman1984/comments/commentRss/361462.htmlhttp://m.tkk7.com/freeman1984/services/trackbacks/361462.htmlCondition錛堟潯浠訛級 灝?Object 鐩戣鍣ㄦ柟娉曪紙wait銆?code>notify 鍜?notifyAll錛夊垎瑙f垚鎴劧涓嶅悓鐨勫璞★紝浠ヤ究閫氳繃灝嗚繖浜涘璞′笌浠繪剰 Lock 瀹炵幇緇勫悎浣跨敤錛屼負姣忎釜瀵硅薄鎻愪緵澶氫釜絳夊緟 set 錛坵ait-set錛夈傚叾涓紝Lock 鏇夸唬浜?synchronized 鏂規硶鍜岃鍙ョ殑浣跨敤錛?tt>Condition 鏇夸唬浜?Object 鐩戣鍣ㄦ柟娉曠殑浣跨敤銆?
涓嬮潰瑙i噴涓?font face="Courier New">Condition api閲岄潰鐨勪緥瀛?鐢熶駭鑰咃紝娑堣垂鑰?錛?br />

public class ConditionTest {

 final Lock lock = new ReentrantLock();
     final Condition notFull  = lock.newCondition(); //鐢熶駭鑰呯殑鍓嶆彁鏉′歡錛屾病鏈夎揪鍒版鏉′歡灝遍樆濉?br />     final Condition notEmpty = lock.newCondition(); //娑堣垂鑰呯殑鍓嶆彁鏉′歡錛屾病鏈夎揪鍒版鏉′歡灝遍樆濉?br />  
     final Object[] items = new Object[100];
     int putptr, takeptr, count;
  //鐢熶駭
     public void put(Object x) throws InterruptedException {
       lock.lock();
       try {
         while (count == items.length)//濡傛灉婊′簡錛屽氨璁╅渶瑕佹潯浠朵負錛氭病婊$殑鐨勭嚎紼?鐢熶駭鑰?絳?br />           notFull.await();
         items[putptr] = x;
         if (++putptr == items.length) putptr = 0;
         ++count;
         notEmpty.signal();//濡傛灉宸茬粡鐢熶駭浜嗭紝灝辮闇瑕佹潯浠朵負涓嶄負絀虹殑綰跨▼(娑堣垂鑰?鎵ц
       } finally {
         lock.unlock();
       }
     }
  //娑堣垂
     public Object take() throws InterruptedException {
       lock.lock();
       try {
         while (count == 0)//濡傛灉涓虹┖灝辮闇瑕佹潯浠朵負涓嶄負絀虹殑綰跨▼(娑堣垂鑰?絳?br />           notEmpty.await();
         Object x = items[takeptr];
         if (++takeptr == items.length) takeptr = 0;
         --count;
         notFull.signal();//濡傛灉娑堣垂浜嗭紝灝辮鏉′歡涓轟笉婊$殑綰跨▼(鐢熶駭鑰?鎵ц
         return x;
       } finally {
         lock.unlock();
       }
     }
   }

 



@joe 2011-10-17 17:28 鍙戣〃璇勮
]]>
ReadWriteLockhttp://m.tkk7.com/freeman1984/archive/2011/10/17/361454.html@joe@joeMon, 17 Oct 2011 08:59:00 GMThttp://m.tkk7.com/freeman1984/archive/2011/10/17/361454.htmlhttp://m.tkk7.com/freeman1984/comments/361454.htmlhttp://m.tkk7.com/freeman1984/archive/2011/10/17/361454.html#Feedback0http://m.tkk7.com/freeman1984/comments/commentRss/361454.htmlhttp://m.tkk7.com/freeman1984/services/trackbacks/361454.html  鍐瞛dk1.5寮濮嬪彲浠ヤ嬌鐢≧eadWriteLock綾繪潵闃叉璇誨啓鍐茬獊.瀹冩湁涓涓凡鏈夌殑瀹炵幇ReentrantReadWriteLock銆?br />ReentrantReadWriteLock浣跨敤鍐呴儴緇存姢鐨勮鍐欓攣鏉ラ槻姝㈣鍐欏啿紿侊紱
 
  public ReentrantReadWriteLock.WriteLock writeLock() return writerLock; }
    
public ReentrantReadWriteLock.ReadLock  readLock()  return readerLock; }
紺轟緥浠g爜濡備笅錛?br />

public class RreadWriteLockTest {

  ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
  public int i  = 0;
//璇誨彇
 public void read() throws InterruptedException{
  readWriteLock.readLock().lock();//鑾峰彇璇婚攣
  System.out.println("read thread:"+Thread.currentThread().getName());
  Thread.sleep(10000);
  System.out.println("read:"+i);
  readWriteLock.readLock().unlock();
 }
//鍐欏叆
 public void write() throws InterruptedException{
  
  readWriteLock.writeLock().lock();//鑾峰彇鍐欓攣
  System.out.println("write thread:"+Thread.currentThread().getName());
  Thread.sleep(10000);
  i = 2;
  System.out.println("write:"+i);
readWriteLock.writeLock().unlock();
 }
}
嫻嬭瘯浠g爜錛?br />1 嫻嬭瘯涓や釜鍚屾椂璇葷殑錛岀粨鏋滈兘鑳藉悓鏃惰鍙栥?br />2 嫻嬭瘯涓涓錛屼竴涓啓鐨勶紝闇瑕佸叾涓竴涓噴鏀鵑攣涔嬪悗鎵嶈兘榪涜鍙﹀涓涓搷浣?br />public static void main(String[] args) throws InterruptedException {
  final RreadWriteLockTest lockTest= new RreadWriteLockTest();
  new Thread(new Runnable() {
   
   @Override
   public void run() {
    try {
     lockTest.write();
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   }
  }).start();
  Thread.sleep(2000);
 new Thread(new Runnable() {
    @Override
    public void run() {
     try {
      lockTest.read();
     } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
   }).start();
 }
鎵撳嵃濡備笅錛?br />write thread:Thread-0鎵ц瀹屼箣鍚?10縐掍箣鍚?鎵嶆墽琛宺ead thread:Thread-1

娉ㄦ剰錛氭墽琛屽畬浠ュ悗涓瀹氳鎵цunlock錛岃涓峫ock鐨勮鏁版病鏈?1錛岃繖鏍峰搴攔ead鎴栬厀rite鐨勬搷浣滃皢鏃犳硶榪涜錛屼竴鐩寸瓑寰呫?/span>



@joe 2011-10-17 16:59 鍙戣〃璇勮
]]>
synchronized 瑕佹敞鎰忕殑鍦版柟http://m.tkk7.com/freeman1984/archive/2011/10/17/361403.html@joe@joeMon, 17 Oct 2011 02:56:00 GMThttp://m.tkk7.com/freeman1984/archive/2011/10/17/361403.htmlhttp://m.tkk7.com/freeman1984/comments/361403.htmlhttp://m.tkk7.com/freeman1984/archive/2011/10/17/361403.html#Feedback0http://m.tkk7.com/freeman1984/comments/commentRss/361403.htmlhttp://m.tkk7.com/freeman1984/services/trackbacks/361403.html鍦↗ava1.5涔嬪墠錛宻ynchronized搴旇鏄渶甯哥敤鐨刯ava鏀寔騫跺彂鎵嬫銆傞偅synchronized鏄庝箞鍋氬埌鐨勪簡錛屼粠java1.0寮濮嬶紝java涓殑姣忎釜瀵硅薄灝變竴涓唴閮ㄩ攣銆傚鏋滀竴涓被鐨勬柟娉曡synchronized鍏抽敭瀛楁墍淇グ錛岄偅涔堣繖涓璞$殑閿佸皢淇濇姢鏁翠釜鏂規硶銆?/p>

涓句緥鏉ヨ錛?/p>

public synchronized void method(){

    method body

}

絳変環浜?/p>

public void method(){

    this.intrinsicLock.lock();

    try{

        method body;

    }finally(){

        this.intrinsicLock.unlock();

    }

}

 

浠庝笂闈㈢殑浠g爜紺轟緥鍙互鐪嬪嚭錛宻ynchronized鐨勪嬌鐢ㄦ柟寮忔槸姣旇緝綆鍗曠殑銆傝繖涔熷鑷翠簡澶ч噺鐨勫垵瀛﹁呭湪紕板埌java緙栫▼鐨勬椂鍊欒惤鍏ラ櫡闃遍噷錛岃涓烘棦鐒秙ynhronized鍙互鎼炲畾涓鍒囷紝閭d箞涓嶇涓変竷浜屽崄涓錛屽彧瑕佹湁騫跺彂鍙兘鎬х殑鍦版柟錛屽氨鍔犱笂synchronized鐨勫叧閿瓧錛岃繖鏄劇劧鏄笉瀵圭殑銆傚湪java瀵硅薄涓紝榪欎釜java瀵硅薄鍙湁榪欎竴涓唴閮ㄩ攣錛屽叾涓竴涓猻ynchronized鏂規硶鑾峰彇鍒頒簡榪欎釜閿侊紝鍙﹀涓涓猻ynchronized鏂規硶鐨勮皟鐢ㄥ皢琚樆濉炪?/p>

鍗?/p>

class sync{

    public synchronized void methodA(){};

    public synchronized void methodB(){};

    ... ...

 

}

methodA 鍜宮ethodB鍦ㄥ垵濮嬪氨鏄簰鏂ョ殑錛屽鏋渕ethodA鍜宮ethodB榪涘叆浜掔浉絳夊緟錛屽氨寰堝鏄撳嚭鐜版閿佺殑鎯呭喌銆傞偅濡傛灉紕板埌榪欑鎯呭喌錛屽簲璇ユ庝箞鍋氫簡錛熷父鐢ㄧ殑鏂瑰紡鏄湪鏂規硶鍐呴儴鏂板緩涓涓棤鎰忎箟鐨勫璞★紝鐒跺悗瀵硅繖涓棤鎰忎箟鐨勫璞″姞閿呫?/p>

 

  1. package zl.study.concurrency.synchronize;  
  2. public class Sync {  
  3.     private int i;  
  4.       
  5.     public void plus(){  
  6.         Object dummy = new Object();  
  7.         synchronized(dummy){  
  8.             i++;  
  9.         }  
  10.     }  
  11.       
  12.     public void minus(){  
  13.         Object dummy = new Object();  
  14.         synchronized(dummy){  
  15.             i--;  
  16.         }         
  17.     }  
  18. }  
 

鍙﹀闇瑕佹敞鎰忕殑鏄皢闈欐佺被澹版槑涓簊ynchronized鏂規硶涔熸槸鍚堟硶鐨勩備婦渚嬫潵璇達紝濡傛灉Sync鏈変竴涓猻tatic synchronized鏂規硶錛岄偅涔堣繖涓柟娉曡璋冪敤鏃?bank.class榪欎釜綾誨璞℃湰韜湪jvm涓皢琚攣浣?/p>

@joe 2011-10-17 10:56 鍙戣〃璇勮
]]>
AtomicIntegerhttp://m.tkk7.com/freeman1984/archive/2011/10/17/361402.html@joe@joeMon, 17 Oct 2011 02:53:00 GMThttp://m.tkk7.com/freeman1984/archive/2011/10/17/361402.htmlhttp://m.tkk7.com/freeman1984/comments/361402.htmlhttp://m.tkk7.com/freeman1984/archive/2011/10/17/361402.html#Feedback0http://m.tkk7.com/freeman1984/comments/commentRss/361402.htmlhttp://m.tkk7.com/freeman1984/services/trackbacks/361402.html

AtomicInteger錛屼竴涓彁渚涘師瀛愭搷浣滅殑Integer鐨勭被銆傚湪Java璇█涓紝++i鍜宨++鎿嶄綔騫朵笉鏄嚎紼嬪畨鍏ㄧ殑錛屽湪浣跨敤鐨勬椂鍊欙紝涓嶅彲閬垮厤鐨勪細鐢ㄥ埌synchronized鍏抽敭瀛椼傝孉tomicInteger鍒欓氳繃涓縐嶇嚎紼嬪畨鍏ㄧ殑鍔犲噺鎿嶄綔鎺ュ彛銆?/p>

鏉ョ湅AtomicInteger鎻愪緵鐨勬帴鍙c?/p>

//鑾峰彇褰撳墠鐨勫?/p>

public final int get()

//鍙栧綋鍓嶇殑鍊鹼紝騫惰緗柊鐨勫?/p>

 public final int getAndSet(int newValue)

//鑾峰彇褰撳墠鐨勫鹼紝騫惰嚜澧?/p>

 public final int getAndIncrement()

//鑾峰彇褰撳墠鐨勫鹼紝騫惰嚜鍑?/p>

public final int getAndDecrement()

//鑾峰彇褰撳墠鐨勫鹼紝騫跺姞涓婇鏈熺殑鍊?/p>

public final int getAndAdd(int delta)

... ...

鎴戜滑鍦ㄤ笂涓鑺傛彁鍒扮殑CAS涓昏鏄繖涓や釜鏂規硶

    public final boolean compareAndSet(int expect, int update) {
    return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    }

    public final boolean weakCompareAndSet(int expect, int update) {
    return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    }

榪欎袱涓柟娉曟槸鍚嶇О涓嶅悓錛屼絾鏄仛鐨勪簨鏄竴鏍風殑錛屽彲鑳藉湪鍚庣畫鐨刯ava鐗堟湰閲岄潰浼氭樉紺哄嚭鍖哄埆鏉ャ?/p>

璇︾粏鏌ョ湅浼氬彂鐜幫紝榪欎袱涓帴鍙i兘鏄皟鐢ㄤ竴涓猽nsafe鐨勭被鏉ユ搷浣滐紝榪欎釜鏄氳繃JNI瀹炵幇鐨勬湰鍦版柟娉曪紝緇嗚妭灝變笉鑰冭檻浜嗐?/p>

 

涓嬮潰鏄竴涓姣旀祴璇曪紝鎴戜滑鍐欎竴涓猻ynchronized鐨勬柟娉曞拰涓涓狝tomicInteger鐨勬柟娉曟潵榪涜嫻嬭瘯錛岀洿瑙傜殑鎰熷彈涓嬫ц兘涓婄殑宸紓

 

 
  1. package zl.study.concurrency;  
  2. import java.util.concurrent.atomic.AtomicInteger;  
  3. public class AtomicIntegerCompareTest {  
  4.     private int value;  
  5.       
  6.     public AtomicIntegerCompareTest(int value){  
  7.         this.value = value;  
  8.     }  
  9.       
  10.     public synchronized int increase(){  
  11.         return value++;  
  12.     }  
  13.       
  14.     public static void main(String args[]){  
  15.         long start = System.currentTimeMillis();  
  16.           
  17.         AtomicIntegerCompareTest test = new AtomicIntegerCompareTest(0);  
  18.         forint i=0;i< 1000000;i++){  
  19.             test.increase();  
  20.         }  
  21.         long end = System.currentTimeMillis();  
  22.         System.out.println("time elapse:"+(end -start));  
  23.           
  24.         long start1 = System.currentTimeMillis();  
  25.           
  26.         AtomicInteger atomic = new AtomicInteger(0);  
  27.           
  28.         forint i=0;i< 1000000;i++){  
  29.             atomic.incrementAndGet();  
  30.         }  
  31.         long end1 = System.currentTimeMillis();  
  32.         System.out.println("time elapse:"+(end1 -start1) );  
  33.           
  34.           
  35.     }  
  36. }  

 

緇撴灉

time elapse:31
time elapse:16
鐢辨涓嶉毦鐪嬪嚭錛岄氳繃JNI鏈湴鐨凜AS鎬ц兘榪滆秴synchronized鍏抽敭瀛?/p>

 

Reference

http://stackoverflow.com/questions/2443239/java-atomicinteger-what-are-the-differences-between-compareandset-and-weakcompar



@joe 2011-10-17 10:53 鍙戣〃璇勮
]]>
CountDownLatch 綆浠嬪拰渚嬪瓙http://m.tkk7.com/freeman1984/archive/2011/07/04/353654.html@joe@joeMon, 04 Jul 2011 09:14:00 GMThttp://m.tkk7.com/freeman1984/archive/2011/07/04/353654.htmlhttp://m.tkk7.com/freeman1984/comments/353654.htmlhttp://m.tkk7.com/freeman1984/archive/2011/07/04/353654.html#Feedback0http://m.tkk7.com/freeman1984/comments/commentRss/353654.htmlhttp://m.tkk7.com/freeman1984/services/trackbacks/353654.html  CountDownLatch綾繪槸涓涓悓姝ュ掓暟璁℃暟鍣?鏋勯犳椂浼犲叆int鍙傛暟,璇ュ弬鏁板氨鏄鏁板櫒鐨勫垵濮嬪鹼紝姣忚皟鐢ㄤ竴嬈ountDown()鏂規硶錛岃鏁板櫒鍑?,璁℃暟鍣ㄥぇ浜? 鏃訛紝await()鏂規硶浼氶樆濉炲悗闈㈢▼搴忔墽琛岋紝鐩村埌璁℃暟鍣ㄤ負0錛宎wait(long timeout, TimeUnit unit)錛屾槸絳夊緟涓瀹氭椂闂達紝鐒跺悗鎵ц錛屼笉綆¤鏁板櫒鏄惁鍒?浜嗐?br />涓嬮潰涓句竴涓瓑杞︾殑渚嬪瓙錛?br />10涓悓瀛︿笂杞︼紝杞︾瓑寰呭悓瀛︿笂杞︼紝濡傛灉鏈夌瓑寰呮椂闂撮檺鍒訛紝鍒版椂闂村氨寮璧幫紝涓嶇瀛︾敓涓婃病涓婂畬銆傚鏋滄病鏈夌瓑寰呮椂闂達紝瀛︾敓涓婂畬浜嗗啀寮錛?
public class CountDownLatchTest {
    
public static int numberOfPeople = 10;//絳夎濺鐨勫鐢熸暟
    public static boolean isGone = false;//杞﹀紑鐨勬爣蹇?/span>
    public static int carWaitTime = 3;//杞︾瓑鐨勬椂闂?/span>
    
    
public static void main(String[] args) throws InterruptedException {
        
        CountDownLatch waitStudentsGetOn 
= new CountDownLatch(numberOfPeople);
        
        
new Thread(new GetOn(waitStudentsGetOn)).start();
        
        waitStudentGetOn(waitStudentsGetOn);
//絳夋墍鏈夌殑瀛︾敓涓婅濺
        
        driveHome();
//寮杞﹁蛋
        
    }

    
    
private static void waitStudentGetOn(CountDownLatch waitStudentsGetOn) throws InterruptedException {
        System.out.println(
"璧剁揣鐨?鎶撶揣鏃墮棿涓婅濺..");
        waitStudentsGetOn.await(carWaitTime, TimeUnit.SECONDS);
//絳?縐掞紝榪樻病涓婅濺錛屽氨寮璧般傘?/span>
        
    }


    
private static void driveHome() throws InterruptedException {
        System.out.println(
"寮杞︼紝闉嬪効鐮?nbsp;甯藉効鐮?nbsp;韜笂鐨勮瑁熺牬 浣犵瑧鎴?nbsp;浠栫瑧鎴?nbsp;涓鎶婃墖鍎跨牬");
        isGone 
= true;
        
    }

    
}

class GetOn implements Runnable{
    
    
private CountDownLatch waitStudentsGetOn;
    GetOn(CountDownLatch waitStudentsGetOn)
{
        
this.waitStudentsGetOn = waitStudentsGetOn;
    }

    
public void run() {
        
for (int i = 0; i < CountDownLatchTest.numberOfPeople; i++{
            
try {
                
if(CountDownLatchTest.isGone){
                    System.out.println(
"濡堢殑錛岃繕宸細"+waitStudentsGetOn.getCount()+" 涓病濞冧笂杞﹀憿.鎬庝箞杞﹁蛋浜?/span>");
                    
break;
                }

                
boolean goonSuccess = new Student(i+1).getOn();//欏哄簭涓婅濺
                if(goonSuccess)waitStudentsGetOn.countDown();
            }
 catch (InterruptedException e) {}
                
if(waitStudentsGetOn.getCount()!=0l){
                    System.out.println(
"榪樺樊錛?/span>"+(waitStudentsGetOn.getCount())+" 涓病涓婅濺");
                }
else{
                    System.out.println(
"閮戒笂杞︿簡");
                }

        }

        
        
    }

    
class Student{
        
private int myNum;//瀛︾敓緙栧彿
         public Student(int num){
                
this.myNum = num;
          }

         
//涓婅濺
         public boolean getOn() throws InterruptedException{
             Thread.currentThread().sleep(
new Random().nextInt(2)*1000);//涓婅濺浣跨敤鐨勬椂闂達紝闅忔満
             if(CountDownLatchTest.isGone){
                 
return false;//涓嶈兘涓婁簡錛屼笂杞﹀け璐?/span>
             }

             System.out.print(
"緙栧彿涓?"+myNum+"鐨勫悓瀛︿笂杞︿簡..");
             
return true;
         }

    }

}



@joe 2011-07-04 17:14 鍙戣〃璇勮
]]>
主站蜘蛛池模板: xxxxx做受大片在线观看免费| 亚洲国产精品无码一线岛国| 亚洲综合激情视频| 亚洲精品免费视频| 久久久久亚洲精品日久生情| 久久成人国产精品免费软件| 亚洲一区精品视频在线| 久久不见久久见中文字幕免费 | 最好看最新的中文字幕免费| 亚洲国产精品无码久久一线 | 久久久久久久99精品免费| 亚洲AV人无码综合在线观看| 日韩免费无码视频一区二区三区 | 成人妇女免费播放久久久| 亚洲精品无码精品mV在线观看| 免费国产99久久久香蕉| 亚洲手机中文字幕| 美女被免费视频网站a国产 | 久久免费精品视频| 亚洲精品第一国产综合精品| 野花高清在线观看免费3中文 | 久久亚洲欧美国产精品| 亚洲无码精品浪潮| 最近2019中文字幕免费大全5| 中国china体内裑精亚洲日本| 免费a级黄色毛片| 国产免费拔擦拔擦8X高清在线人| 亚洲精品mv在线观看| 日本不卡高清中文字幕免费| 二个人看的www免费视频| 亚洲精品韩国美女在线| 国产成人精品123区免费视频| 全黄大全大色全免费大片| 亚洲免费视频观看| 亚洲综合久久夜AV | 亚洲成人免费电影| 成人a毛片视频免费看| 亚洲国产日韩在线成人蜜芽 | 亚洲国产精品成人AV无码久久综合影院| 最近2019中文免费字幕在线观看| 亚洲中文无码亚洲人成影院|