brand new start

          常用鏈接

          統計

          最新評論

          java 多線程

          生產消費例子:
          用synchronized:
          class Resource{
              
          private String name;
              
          private int count = 0;
              
          private boolean flag = true;
              
          public synchronized void set(String name){
                  
          while(!flag){
                      
          try {
                          wait();
                      } 
          catch (InterruptedException e) {
                      
          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }
                  }
                  
          if(flag){
                      
          this.name = name;
                      System.out.println(Thread.currentThread().getName()
          +"   生產了    "+name+""+(++count));
                      
                  }
                  flag 
          = false;
                  notifyAll();
              }
              
          public synchronized void get(){
                  
          while(flag){
                      
          try {
                          wait();
                      } 
          catch (InterruptedException e) {
                          
          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }
                  }
                  
          if(!flag){
                      System.out.println(Thread.currentThread().getName()
          +"   消費了    "+name+""+count);
                      
                  }
                  flag 
          = true;
                  notifyAll();
              }
          }

          class Producer implements Runnable{
              
          private Resource r;
              Producer(Resource r){
                  
          this.r = r;
              }
              
          public void run(){
                  
          while(true){
                      r.set(
          "Tom");
                  }
              }
              
          }

          class Consumer implements Runnable{
              
          private Resource r;
              Consumer(Resource r){
                  
          this.r = r;
              }
              
          public void run(){
                  
          while(true){
                      r.get();
                  }
              }
              
          }

          public class TradeDemo {
              
          public static void main(String[] args){
                  Resource res 
          = new Resource();
                  Producer p 
          = new Producer(res);
                  Consumer c 
          = new Consumer(res);
                  Thread t1 
          = new Thread(p);
                  Thread t2 
          = new Thread(p);
                  Thread t3 
          = new Thread(c);
                  Thread t4 
          = new Thread(c);
                  t1.start();
                  t2.start();
                  t3.start();
                  t4.start();
              }
          }
          用Lock:
          import java.util.concurrent.locks.*;

          import org.junit.Test;

          class Resources {
              
          private String name;
              
          private int count = 0;
              
          private boolean flag = true;
              
          private Lock lock = new ReentrantLock();
              
          private Condition condition_pro = lock.newCondition();
              
          private Condition condition_con = lock.newCondition();

              
          public void set(String name) {
                  lock.lock();
                  
          try {
                      
          while (!flag) {
                          condition_pro.await();
                      }
                      
          if (flag) {
                          
          this.name = name;
                          System.out.println(Thread.currentThread().getName()
                                  
          + "   生產了    " + name + "" + (++count));

                      }
                      flag 
          = false;
                      condition_con.signal();
                  } 
          catch (InterruptedException e) {
                      System.out.println(
          "生產exception");
                  } 
          finally {
                      lock.unlock();
                  }
              }

              
          public void get() {
                  lock.lock();
                  
          try {
                      
          while (flag) {
                          condition_con.await();
                      }
                      
          if (!flag) {
                          System.out.println(Thread.currentThread().getName()
                                  
          + "   消費了    " + name + "" + count);

                      }
                      flag 
          = true;
                      condition_pro.signal();
                  } 
          catch (InterruptedException e) {
                      System.out.println(
          "消費exception");
                  } 
          finally {
                      lock.unlock();
                  }
              }
          }

          class Producers implements Runnable {
              
          private Resources r;

              Producers(Resources r) {
                  
          this.r = r;
              }

              
          public void run() {
                  
          while (true) {
                      r.set(
          "Tom");
                  }
              }

          }

          class Consumers implements Runnable {
              
          private Resources r;

              Consumers(Resources r) {
                  
          this.r = r;
              }
              @Test
              
          public void run() {
                  
          while (true) {
                      r.get();
                  }
              }

          }

          public class TradeDemo2 {
              
          public static void main(String[] args) {
                  Resources res 
          = new Resources();
                  Producers p 
          = new Producers(res);
                  Consumers c 
          = new Consumers(res);
                  Thread t1 
          = new Thread(p);
                  Thread t2 
          = new Thread(p);
                  Thread t3 
          = new Thread(c);
                  Thread t4 
          = new Thread(c);
                  t1.start();
                  t2.start();
                  t3.start();
                  t4.start();
              }
          }
          Dead lock:
          public class DeadLockThread implements Runnable{
              
          private int tickets = 100;
              
          private boolean flag;
              DeadLockThread(
          boolean flag){
                  
          this.flag = flag;
              }
              
          public void run(){
                  
          while(tickets>0){
                      
          if(flag){
                          
          synchronized(MyLock.locka){
                              System.out.println(
          "if locka");
                              
          synchronized(MyLock.lockb){
                                  System.out.println(Thread.currentThread().getName()
          +"..true.."+"if lockb  "+tickets--);
                              }
                          }
                      }
                      
          else{
                          
          synchronized(MyLock.lockb){
                              System.out.println(
          "else lockb");
                              
          synchronized(MyLock.locka){
                                  System.out.println(Thread.currentThread().getName()
          +"..false.."+"else lockb  "+tickets--);
                              }
                          }
                      }
                  }
              }
              
          }

          class MyLock{
              
          static Object locka = new Object();
              
          static Object lockb = new Object();
          }

          posted on 2012-06-14 17:12 Nemo_blinker 閱讀(1027) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 松潘县| 尖扎县| 龙山县| 淮北市| 武川县| 汉寿县| 双鸭山市| 汝州市| 新疆| 顺昌县| 南城县| 荔浦县| 福泉市| 黔南| 休宁县| 沈阳市| 双城市| 浙江省| 尤溪县| 湾仔区| 盐池县| 马关县| 柳江县| 海伦市| 松桃| 揭阳市| 东山县| 永昌县| 新野县| 泰兴市| 鹤山市| 平顺县| 洪湖市| 正宁县| 长岭县| 蕉岭县| 保亭| 柳林县| 广德县| 巨野县| 苍溪县|