- 1、本文档共66页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
由输出结果,我们可以看到生产者和消费者两个线程实现了同步。 思考题: ①线程是什么?与进程的区别? ②创建线程对象的方法有哪些? ③线程有哪些状态,画出状态转换图。 ④线程的同步与共享 监视器解决什么问题? nofity和wait解决什么问题? 会编写Product-Consumer程序吗? 试验 实验名称:多线程 实验目的: 了解多线程概念 熟悉多线程编程 实验任务: 设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况。 实验要求: 要求打印出每个售票点所卖出的票号 各售票点不能售出相同票号的火车票 3)尤其关键的是,当一个线程访问object的一 个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。 num对象 Counter1 Counter2 num对象 Counter1 Counter2 锁 我们把系统中使用某类资源的线程称为消费者,产生或释放同类资源的线程称为生产者。 下面我们来讨论关于线程的同步问题的一般模型。 即生产者-消费者问题。 二、线程间的同步控制 生产者-消费者问题 在一个Java的应用程序中,生产者线程向文件中写数据,消费者从文件中读数据,这样,在这个程序中同时运行的两个线程共享同一个文件资源。 通过这个例子我们来了解怎样使它们同步。 生产者-消费者 在这个例子中,生产者产生从0到9的整数,将它们存储在名为"CubbyHole"的对象中并打印出这些数来。然后调用sleep()方法使生产者线程在一个随机产生的0到100秒的时间段内休息。 class Producer extends Thread { private CubbyHole cubbyhole; private int number; public Producer(CubbyHole c, int number) { cubbyhole = c; this.number = number; } public void run() { for (int i = 0; i 10; i++) { cubbyhole.put(i); System.out.println(Producer # + this.number + put: + i); try { sleep((int)(Math.random() * 100)); } catch (InterruptedException e) { } } } } 消费者线程则不断地从CubbyHole对象中取这些整数: class Consumer extends Thread { private CubbyHole cubbyhole; private int number; public Consumer(CubbyHole c, int number) { cubbyhole = c; this.number = number; } public void run() { int value = 0; for (int i = 0; i 10; i++) { value = cubbyhole.get(); System.out.println(Consumer # + this.number + got: + value); } } } class CubbyHole { private int seq; public synchronized int get() { return seq; } public synchronized void put(int value) { seq = value; } } 生产者与消费者通过CubbyHole对象来共享数据。 但我们发现不论是生产者线程还是消费者线程都无法保证生产者每产生一个数据,消费者就能及时取得该数据并且只取一次。 通过CubbyHole中的put()和get()方法只能保证较低层次的同步. 第一种情况是如果生产者比消费者快,那么在消费者来不及取前一个数据之前,生产者又产生了新的数据。 于是,消费者很可能就会跳过前一个数据,这样就会有下面的结果: 生产者 消
您可能关注的文档
- hy的permill安装及基本功能介绍.pptx
- HZD2000系列自的动提升料斗混合机说明书.docx
- H海览F的六练习.ppt
- h的ibernate表关联详解.pdf
- H的TCC-1总线消防电话说明书.pdf
- h的tc vive 中文说明书.pdf
- H的TML 标准属性.docx
- h的tml标签属性大全.doc
- H的TTP 协议中你必须知道的三种数据格式.doc
- I2S的E1软件工程概论.ppt
- 2023年江苏省镇江市润州区中考生物二模试卷+答案解析.pdf
- 2023年江苏省徐州市邳州市运河中学中考生物二模试卷+答案解析.pdf
- 2023年江苏省苏州市吴中区中考冲刺数学模拟预测卷+答案解析.pdf
- 2023年江苏省南通市崇川区田家炳中学中考数学四模试卷+答案解析.pdf
- 2023年江西省吉安市中考物理模拟试卷(一)+答案解析.pdf
- 2023年江苏省泰州市海陵区九年级(下)中考三模数学试卷+答案解析.pdf
- 2023年江苏省苏州市高新二中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市九年级数学中考复习模拟卷+答案解析.pdf
- 2023年江苏省南通市海安市九年级数学模拟卷+答案解析.pdf
- 2023年江苏省泰州市靖江外国语学校中考数学一调试卷+答案解析.pdf
文档评论(0)