brand new start

          常用鏈接

          統計

          最新評論

          2012年6月14日 #

          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 @ 2012-06-14 17:12 Nemo_blinker 閱讀(1026) | 評論 (0)編輯 收藏

          僅列出標題  下一頁
          主站蜘蛛池模板: 博白县| 澄城县| 富源县| 平度市| 巴彦淖尔市| 黄龙县| 东莞市| 聂荣县| 永德县| 柞水县| 德江县| 平顶山市| 洪泽县| 恩施市| 鲁山县| 隆安县| 曲靖市| 闽侯县| 贵溪市| 基隆市| 惠水县| 漯河市| 同江市| 纳雍县| 河间市| 汉沽区| 吉安县| 同德县| 扎赉特旗| 渭源县| 通山县| 龙陵县| 潼关县| 同德县| 合作市| 巴彦淖尔市| 大荔县| 宝鸡市| 紫金县| 南江县| 监利县|