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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐志海 中级黑马   /  2013-11-21 16:03  /  1084 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 唐志海 于 2013-11-21 18:19 编辑

而且按道理说这题我用signal()没有用singalAll()的话t1,t,t2,t3都会出现等待状态,但是我一运行缺没有出现这么个情况。。不知道这是什么情况??
  1. import java.util.concurrent.locks.Condition;
  2. import java.util.concurrent.locks.Lock;
  3. import java.util.concurrent.locks.ReentrantLock;

  4. class cursom
  5. {
  6.         private String name;
  7.         private boolean flag=false;
  8.         private String sex;
  9.         private Lock lock=new ReentrantLock();
  10.         private Condition con=lock.newCondition();
  11.         public void set(String name,String sex) throws InterruptedException
  12.         {
  13.                 lock.lock();
  14.                 try{
  15.                         while(flag)
  16.                
  17.                         con.await();
  18.         
  19.                         this.name=name;
  20.                         this.sex=sex;
  21.                         flag=true;
  22.                         con.signal();
  23.                 }
  24.                
  25.                 finally
  26.                 {
  27.                         lock.unlock();
  28.                 }
  29.         
  30. }
  31.         public void prit()throws InterruptedException
  32.         {
  33.                 lock.lock();
  34.                 try{
  35.                         while(!flag)
  36.                                 con.await();
  37.                         System.out.println(name+"....."+sex);
  38.                         
  39.                         flag=false;
  40.                         con.signal();
  41.                         
  42.                 }
  43.                
  44.                 finally {
  45.                         lock.unlock();
  46.                 }
  47.         
  48.         }
  49.         
  50. }
  51. class Print implements Runnable
  52. {
  53.         private cursom  r;
  54.         Print(cursom  r)
  55.         {
  56.                 this.r=r;
  57.         }
  58.         public void run()
  59.         {
  60.                 int x=0;
  61.                 //为什么上面set方法抛出了异常,而这边都没有处理都可以运行,反而是用try...catch处理了反而出现编译错误。
  62.                 while(true)
  63.                
  64.                         {
  65.                                 if(x==0)
  66.                                         System.out.println("tt"+"....."+"feman");
  67.                                 else
  68.                                         System.out.println("李四"+"....."+"男");
  69.                                 x=(x+1)%2;
  70.                         }
  71.                
  72. }
  73.         
  74. }
  75. class Out implements Runnable
  76. {
  77.         private cursom  r;
  78.         Out(cursom  r)
  79.         {
  80.                 this.r=r;
  81.         }
  82.         public void run()
  83.         {
  84.                 try {
  85.                         r.prit();
  86.                 } catch (InterruptedException e) {
  87.                         // TODO Auto-generated catch block
  88.                         e.printStackTrace();
  89.                 }
  90.         }
  91. }

  92. public class lockDemo {
  93.          
  94.                  public static void main(String[] args)
  95.                  {
  96.                          cursom r=new cursom();
  97.                         
  98.                          Print in=new Print(r);
  99.                          Out ou=new Out(r);//由于越界了,所以下面的代码是定义两个in的线程,两个ou的线程并启动。
  100.                        <blockquote>Thread t=new Thread(in)
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

2 个回复

倒序浏览
你的代码没有写完吧。而且完全看不懂。。格式要写好呀。
一百多行的代码,没有注释,如果过一个月之后你再看这个,你就明白了。。
回复 使用道具 举报
这种提问很难回答    要标注代码出错的位置和错误提示  还有就是你对错误的不解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马