德国开元华人社区 开元周游

标题: 关于性爱的多线程问题研究(一) [打印本页]

作者: cyan    时间: 22.4.2003 13:28
关于性爱的多线程问题研究(一)<br>发信站: The unknown SPACE (Mon Apr 21 14:13:47 2003) WWW-POST<br> <br>经过多年研究,程序员发现,人们广泛关注的性爱行为就是一个多线程问题,在这个<br>专题中,我们将讨论性爱行为优先级、同步、死锁、挂起、恢复、中止及通信问题。<br> <br>首先我们来创建两个线程<br> <br>class makelove implements Runnable {<br>    Thread t;<br>    makelove() {<br>      //Create a new Thread of makelove<br>      t = new Thread(this,&quot;make love&quot;);<br>      t.start();<br>    }<br>    public void run() throws<br>过程中突然阳痿Exception,女人突然来了大姨妈Exception,有人敲门Exception,电话响了<br>Exception,地震Exception {<br>      try {<br>        while((男人兴奋想做了||女人淫荡想做了)&&身体情况允许){<br>          前奏;<br><br><br>          开始做;<br>          结束;<br>          Thread.sleep(合适时间)<br>      }<br>    }<br> }<br> <br> class love implements Runnable {<br>    Thread t;<br>    makelove() {<br>      //Create a new Thread of love<br>      t = new Thread(this,&quot;love&quot;);<br>      if (合适异性出现)<br>      t.start();<br>    }<br>    public void run() throws 双方家长反对Exception,<br>前任男友/女友搅局Exception{<br>       开始耍朋友;<br>      }<br> }<br> <br>首先我们来复习一下线程同步的概念,当两个或者两个的线程需要共享资源,需要某种方<br><br><br>法确定资源在某一刻仅被一个线程占用,叫同步。<br>明确的分析,性和爱并不存在绝对的同步,但是在性和爱行为发生的过程中,会产生派生<br>的枝节线程,比如做爱和睡觉,同时占用了时间这个资源,<br>所以我们就简单来分析做爱和睡觉线程的同步关系,来阐述线程同步的概念。<br> <br>在此篇中,我们要新创建一个消费时间类,定义如下:<br> <br>class usabletime {<br>  void usetime (String 行为参数){<br>    //此处消费时间做xx,做的对象是做爱or睡觉<br>    do something;<br>    String 具体行为=行为参数;<br>    if (具体行为.equals(&quot;做爱&quot;)){<br>    //反馈做的效果<br>          发出声音(&quot;啊,啊......&quot;);}<br>    else if (具体行为.equals(&quot;睡觉&quot;)){<br>    //反馈做的效果<br>          发出声音(&quot;哼,打呼噜的声音......&quot;);<br>    }<br>    else{<br>    //两者都不是,行为怪异<br>    System.out.println(&quot;你在弄充气娃娃!&quot;);<br><br><br>    }<br>    try {<br>    Thread.sleep(合适时间);<br>    }catch (家里有客人Exception){<br>    心里嘀咕:真不识相;<br>    继而愤怒:还不走,老子毛了;<br>    }catch (未满足还想做Exception){<br>    //重复以上操作<br>    repeat do;<br>    }<br>  }<br>}<br> <br>此处重写makelove类,当然可以采用继承,为了形象起见,重写如下:<br>class makelove implements Runnable {<br>    Thread t;<br>    String 行为参数 = &quot;做爱&quot;;<br>    usabletime newusetimetodo;<br>    //构造函数重载<br>    public makelove(usabletime usetimetodo) {<br>      //Create a new Thread of makelove<br>      newusetimetodo = usetimetodo;<br><br><br>      t = new Thread(this,&quot;make love&quot;);<br>      t.start();<br>    }<br>    //此处为添加<br>    setpr(p){<br>    t.setPriority(p);<br>    }<br>    //<br>    public void run() throws<br>过程中突然阳痿Exception,女人突然来了大姨妈Exception,有人敲门Exception,电话响了<br>Exception,地震Exception {<br>      try {<br>        while((男人兴奋想做了||女人淫荡想做了)&&身体情况允许){<br> <br>        //此处要调用以上的usabletime类的usetime()方法<br>          newusetimetodo.usetime(行为参数//此处为&quot;做爱&quot;);<br>          前奏;<br>          开始做;<br>          结束;<br>          Thread.sleep(合适时间)<br>      }<br>    }<br><br><br> }<br> <br>睡觉类的定义:<br> <br>class sleepdeeply {<br>   Thread t;<br>   String 行为参数 = &quot;睡觉&quot;;<br>    usabletime newusetimetodo;<br>    //构造函数<br>    public sleepdeeply(usabletime usetimetodo) {<br>    newusetimetodo = usetimetodo;<br>    t.start();<br>    }<br>    public void run() throws 有人敲门Exception......{<br>    //此处要调用以上的usabletime类的usetime()方法<br>    newusetimetodo.usetime(行为参数//此处为睡觉&quot;);<br>    }<br>}<br> <br>然后我们创建主类,onedaywhattodo<br> <br>public class onedaywhattodo {<br><br><br>   public static void main(Stirng args[]){<br>   //定义做爱,睡觉,消费时间类的实例<br>      usabletime usetimetodo = new usabletime(usetimetodo);<br>      makelove makinglove = new makelove();<br>      sleepdeeply sleepingdeeply = new sleepdeeply(usetimetodo);<br> <br>    try {<br>    nakinglove.t.join();<br>    sleepingdeeply.t.join();<br>    }catch(InterruptedException){<br>    System.out.println(&quot;中断原因未知&quot;);<br>    }<br>    System.out.println(&quot;做XX完了收工!&quot;);<br>   }<br>}<br> <br>大家此时可以预料程序的输出:(以上的输出可能因操作系统和任务装载先后其他原因而<br>不同)<br>啊,哼(打呼噜的声音),啊,哼(打呼噜的声音),哼(打呼噜的声音)......<br>可想,做爱和睡觉的效果都很差!<br> <br>并不是等啊...完了,再哼......<br><br><br> <br>为什么?是因为通过sleep(),usetime()允许执行转换到另外一个线程,没有阻止两个线<br>程同时调用一个对象newusetimetodo<br>这是一种竞争,两个线程争着完成方法,导致发出的声音混乱。上面用sleep()使这种影响<br>加剧。<br>大多数情况下,竞争是混乱复杂不可预知,因为你不知道上下文转换何时会发生,所以输<br>出结果自然不好预测。<br> <br>为达到理想的做爱或者睡觉的结果,并发出理想的声音效果,必须有权的使用usabletime<br>对象。<br>也就是说在某一时刻,必须只有一个线程可以支配它,为此我们必须在usabletime类的us<br>etime方法前加上关键字synchronized<br>如下:<br>class usabletime {<br>  synchronized void usetime (String 行为参数){<br>    //此处消费时间做xx,做的对象是or睡觉<br>    do something;<br>    String 具体行为=行为参数;<br>    if (具体行为.equals(&quot;做爱&quot;)){<br>    //反馈做的效果<br>          发出声音(&quot;啊,啊......&quot;);}<br>    else {<br><br><br>    //反馈做的效果<br>          发出声音(&quot;哼,打呼噜的声音......&quot;);<br>    }<br>    try {<br>    Thread.sleep(合适时间);<br>    }catch (家里有客人Exception){<br>    心里嘀咕:真不识相;<br>    继而愤怒:还不走,老子毛了;<br>    }catch (未满足还想做Exception){<br>    //重复以上操作<br>    repeat do;<br>    }<br>  }<br>}<br>但是通常情况下,假定usabletime类是第三方提供的,我们不能得知源码,我们可以用另<br>一种标志对象为同步对象的方法,如:<br>newusetimetodo.usetime(行为参数//此处为&quot;做爱&quot;);<br>前面加上<br>sychronized (newusetimetodo);<br>表示此对象同步。<br> <br>下一篇我们讨论性和爱线程的通信问题<br><br><br>
作者: Flossen    时间: 22.4.2003 16:38
高,喷饭!!!
作者: brett    时间: 4.5.2003 14:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: 清音雅意    时间: 3.8.2003 12:09
  <!--emo&--><img src='https://www.kaiyuan.info/modules/ipboard/html/emoticons/laugh.gif' border='0' style='vertical-align:middle' alt='laugh.gif'><!--endemo-->  
作者: 红袖添香    时间: 3.8.2003 17:36
哈哈,有趣&#33;<br><br>哪位运行过这个程序牙? <!--emo&--><img src='https://www.kaiyuan.info/modules/ipboard/html/emoticons/laugh.gif' border='0' style='vertical-align:middle' alt='laugh.gif'><!--endemo-->  




欢迎光临 德国开元华人社区 开元周游 (https://bbs.kaiyuan.cn/) Powered by Discuz! X3.2