信 息 工 程 学 院
《Java语言程序设计》实验报告
学院: | 班级: | 姓名: | 学号: | 成绩: |
1、实习目标
(1) 掌握 Java 多线程的概念和实现
(2) 掌握使用继承 Thread 产生线程
(3) 实现 Runnable 接口产生线程
(4) 掌握 wait-notify 机制
2、实验过程
任务一:多线程输出字符串(继承 Thread 类)
创建两个独立的线程,一个线程打印 20 次“A”,另一个线程打
印 20 次“B”,输出结果类似于:
ABBABAABBA….
/* 两个独立线程,分别输出 A 和 B */
要求:使用继承 Thread 类的方式实现线程对象
代码截图:
PrintA类:
PrintB类:
PrintTest类:
运行结果:
任务二:多个线程共同执行目标对象的任务(实现 Runnable)
有一批零件(Part)的生产任务,总量是 800 个,生产一个零
件耗时 10ms。有 4 个车间(Workshop)共同完成这一批任务。
(选做)分别统计每个车间各自生产了多少个零件并输出。
代码截图:
Part类:
WorkShop类:
运行结果:
此处“workshop * 生产零件 * 个”的意思是该线程执行了第 * 次,而不是说该线程共执行了 * 次。
最后四行指出了每条线程执行命令的总数。
值得注意的是,同样的程序,在机房运行,与在我自己的电脑上运行,结果各个线程交替执行的情况差别很大,这也许与CPU的型号有关。
机房是 Intel i7-4790 4核8线程
我的是AMD R5-1600X 6核12线程
任务三:生产者-消费者问题(线程间通信)
有一种商品 Product 类,一个货架类(GoodsShelf):拥有
一个容量为 size(可根据需要设定大小)的 Product 数组。生产
者(Producer)往货架上放置商品,消费者(Consumer)从货
架上消费商品。二者是并发执行的。(货架空的时候只能生产,货架
满的时候只能消费。)使用多线程并发机制和线程间通信,模拟商品
编号从 1 到 100 的生产和消费过程。
要求:
(必做)只模拟一个生产者和一个消费者的情况;
(选作)模拟 2 个生产者和 3 个消费者的情况,生产商品的时间和
消费商品的时间可以调整 Thread.sleep(整型值)。
代码截图:
Consumer类:
Producer类:
Product类:
GoodsShelf类:
JustFuckingBuyIt类:
运行结果:
代码解释见代码中的注释。
本文来源:https://www.2haoxitong.net/k/doc/8c34eb50cf2f0066f5335a8102d276a2002960ee.html
文档为doc格式