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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐长智 中级黑马   /  2013-3-4 20:25  /  1090 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 唐长智 于 2013-3-4 21:12 编辑

为什么不能得到张老师视频中的结果呢?
  1. import java.util.Random;import java.util.concurrent.Executors;
  2. import java.util.concurrent.locks.ReentrantReadWriteLock;

  3. public class ReaderWriterTest {
  4.         public static void main(String[] args){
  5.                 final Queue q = new Queue();
  6.                 Executors.newFixedThreadPool(3).execute(new Runnable(){
  7.                         //创建线程池定义3个线程
  8.                         public void run(){
  9.                                 while(true)
  10.                                 {
  11.                                         q.get();
  12.                                 }
  13.                         }
  14.                 });
  15.                
  16.                 for(int i = 0;i<3;i++){
  17.                         //创建3个线程
  18.                         new Thread(){
  19.                                 public void run(){
  20.                                         while(true){
  21.                                                 q.put(new Random().nextInt(1000));
  22.                                         }
  23.                                 }
  24.                         }.start();
  25.                 }
  26.         }
  27. }

  28. class Queue{
  29.         private Object data = null;
  30.         //定义私有的data数据
  31.         private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
  32.         //定义私有的读写锁
  33.         public void put(Object data){
  34.                 rwl.writeLock().lock();
  35.                 //使用写锁
  36.                 try {
  37.                         //打印put方法运行的当前线程和状态
  38.                         System.out.println(Thread.currentThread().getName() + "ready to write");
  39.                         Thread.sleep(1000);
  40.                         this.data = data;
  41.                         System.out.println(Thread.currentThread().getName() + "has write" + data);
  42.                 } catch (InterruptedException e) {
  43.                         e.printStackTrace();
  44.                 }
  45.                 finally{
  46.                         rwl.writeLock().unlock();
  47.                         //释放写锁
  48.                 }
  49.                
  50.         }
  51.         
  52.         public void get(){
  53.                 rwl.readLock().lock();
  54.                 //使用读锁
  55.                 try {
  56.                         //打印get方法运行的当前线程和状态
  57.                         System.out.println(Thread.currentThread().getName() + "ready to read");
  58.                         Thread.sleep(1000);
  59.                         System.out.println(Thread.currentThread().getName() + "has read" + data);
  60.                 } catch (InterruptedException e) {
  61.                         e.printStackTrace();
  62.                 }
  63.                 finally{
  64.                         rwl.readLock().unlock();
  65.                         //释放读锁
  66.                 }
  67.         }
  68. }
复制代码
线程池中创建了3个线程来读取,为什么运行结果中只有一个线程在运行呢?

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

1 个回复

倒序浏览
试运行三个线程都可以运行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马