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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庄生晓梦 中级黑马   /  2013-4-1 20:49  /  1785 人查看  /  7 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 庄生晓梦 于 2013-4-7 15:22 编辑

模拟妈妈做饭,做饭时发现没有盐了,
  让儿子去买盐(假设买盐需要3分钟),
  只有盐买回来之后,妈妈才能继续做饭的过程。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励

查看全部评分

7 个回复

倒序浏览
让做饭睡眠3分钟然后再激活!
回复 使用道具 举报
多线程的问题,妈妈和儿子各看作一个线程,盐可以看作锁,儿子拿到锁wait三分钟之后释放锁。妈妈继续做饭!
回复 使用道具 举报
我感觉也可以用定时调度也可以,Timer和TimerTask类,线程也可以。
http://note.youdao.com/share/?id=b377839663f2241a059b0df455d283a4&type=note
这是我自己的有道云笔记
回复 使用道具 举报
  1. public class Cooking {

  2.         boolean hasSalut = false;

  3.         Object object = new Object();

  4.         public void cook() {

  5.                 if (!hasSalut) {
  6.                         System.out.println("做饭没盐了,快去买盐");
  7.                         new Thread(new Son()).start();

  8.                         synchronized (object) {
  9.                                 try {
  10.                                         object.wait();
  11.                                 } catch (InterruptedException e) {
  12.                                         e.printStackTrace();
  13.                                 }
  14.                         }
  15.                        
  16.                         System.out.println("有盐了,开始做饭~");
  17.                 }

  18.                
  19.         }

  20.         class Son implements Runnable {

  21.                 @Override
  22.                 public void run() {

  23.                         System.out.println("麻麻,我去买盐了~~");
  24.                        
  25.                         try {
  26.                                 Thread.sleep(500);
  27.                         } catch (InterruptedException e) {
  28.                                 e.printStackTrace();
  29.                         }

  30.                         synchronized (object) {
  31.                                 System.out.println("麻麻,买到了~~");
  32.                                 object.notify();
  33.                         }
  34.                 }

  35.         }
  36.        
  37.         public static void main(String[] args) {
  38.                 Cooking cooking = new Cooking();
  39.                 cooking.cook();
  40.         }

  41. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
黄玉昆 发表于 2013-4-3 12:00
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢  ...

如何进行修改啊,木有找到怎么修改为已解决
回复 使用道具 举报
黄小贝 发表于 2013-4-2 02:03

谢谢了,我看了但是有关于多线程的,还是不明白
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马