A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 提菩--空 中级黑马   /  2014-6-8 23:09  /  1083 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能给个多线程典型的例子,我自己也从网上搜了一些,但感觉不具有代表性

2 个回复

倒序浏览
本帖最后由 ender 于 2014-6-8 23:28 编辑


经典的生产者和消费者模型  用的Lock接口加的锁
  1. class StorageLock {
  2.         int count;
  3.         String product;
  4.         boolean flag;
  5.         Lock lock = new ReentrantLock();
  6.         Condition con = lock.newCondition();
  7.         Condition pro = lock.newCondition();
  8.         
  9.         public void produce(String product){
  10.                 lock.lock();
  11.                 try{
  12.                         while(flag)
  13.                                 pro.await();
  14.                         this.product=product;
  15.                         count++;
  16.                         System.out.println(product+"...Producer..."+count);
  17.                         flag=true;
  18.                         con.signal();
  19.                 }
  20.                 catch(InterruptedException e){}
  21.                 finally{
  22.                         lock.unlock();
  23.                 }
  24.         }
  25.         public void consume(){
  26.                 lock.lock();
  27.                 try{
  28.                         while(!flag)
  29.                                 con.await();
  30.                         System.out.println(product+"...Consumer......."+count);
  31.                         flag=false;
  32.                         pro.signal();
  33.                 }
  34.                 catch(InterruptedException e){}
  35.                 finally{
  36.                         lock.unlock();
  37.                 }
  38.         }
  39. }
  40. class ProducerLock implements Runnable{
  41.         StorageLock sto;
  42.         ProducerLock(StorageLock sto){
  43.                 this.sto=sto;
  44.         }
  45.         public void run(){
  46.                 while(true)
  47.                         sto.produce("commodity");
  48.         }
  49. }
  50. class ConsumerLock implements Runnable{
  51.         StorageLock sto;
  52.         ConsumerLock(StorageLock sto){
  53.                 this.sto=sto;
  54.         }
  55.         public void run(){
  56.                 while(true)
  57.                         sto.consume();
  58.         }
  59. }

  60. class ProducerConsumerLock{
  61.         public static void main(String[] args){
  62.                 StorageLock sto = new StorageLock();
  63.                 new Thread(new ProducerLock(sto)).start();
  64.                 new Thread(new ProducerLock(sto)).start();
  65.                 new Thread(new ConsumerLock(sto)).start();
  66.                 new Thread(new ConsumerLock(sto)).start();
  67.         }
  68. }
复制代码




回复 使用道具 举报
ender 发表于 2014-6-8 23:26
经典的生产者和消费者模型  用的Lock接口加的锁

谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马