????????????????????顣??????????B/S????£???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ò??????????????

??????????е???????????????????????????????????????????????????????б???????????????????????????????????????????????ò?????????????????????????ó????????????“???????”?????????????????????????????????

????????????????????????????????????????????????

public class MultiThread{

 private int i = 0;
 private String value = null;
 public void run(){
 
  if(i++%2 == 0){
   value = "abcdefghijk";
   for(int i = 0; i < value.length(); i++)
    System.out.print(value.charAt(i));
   System.out.println();
  }
  else{
   value = "1234567890";
   for(int i = 0; i < value.length(); i++)
    System.out.print(value.charAt(i));
   System.out.println();
  }
 
 }
 
 public static void main(String[] args) {

  final MultiThread source = new MultiThread();
  for(int i = 0; i < 4; i++){
   new Thread(new Runnable(){public void run(){
   
    while(true)source.run();
   }}).start();
  }
 }

}

?????????????????????????????4?????????????????????source??????????????source??run?????????value?????????value??????????4???????????

??????????????????????????“???”??????????????????????????????????????????????ν????????????

???????????????????????????????????????????????????????????????????????????????????????????????????仯??????仯?????б??????????????????????????????У????????????FIFO??first in first out????????????????????????????? synchronized ???????ɡ?????????????????????????е?????????????????????????????????????????????????????????????????????????????????

????????????????synchronized??????????

public synchronized void run(){
 
  if(i++%2 == 0){
   value = "abcdefghijk";
   for(int i = 0; i < value.length(); i++)
    System.out.print(value.charAt(i));
   System.out.println();
  }
  else{
   value = "1234567890";
   for(int i = 0; i < value.length(); i++)
    System.out.print(value.charAt(i));
   System.out.println();
  }
 
 }

??????????Java5??????????μ??????java.util.concurrent.locks.ReentrantLock??????????????java.util.concurrent.locks.ReentrantReadWriteLock??java.util.concurrent.locks.ReentrantReadWriteLock??????壬????????????ReadLock????????WriteLockд????????try-catch-finally?????????á?

?????????????????????????????????????????????????????????

??????1????????

????????????synchronized?????Java??????????淽???????????????????monitorenter??monitorexit????????????????????????????м????????????????????

??????????????ReentrantLock????Java??API????????????????????????????lock() ?? unlock()??????try-catch-finally?????????á??????Щ??????????????????ж?????????????????????????????

??????2?????????

????Java5?????synchronized????????????????????????????????ReentrantLock???????????????????????ReentrantLock??????

????Java6???????????????????????????????synchronized??????Java???????????JVM???????????????????????á?