java实验多线程开发.docx

上传人:太** 文档编号:35019522 上传时间:2022-08-20 格式:DOCX 页数:7 大小:27.66KB
返回 下载 相关 举报
java实验多线程开发.docx_第1页
第1页 / 共7页
java实验多线程开发.docx_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《java实验多线程开发.docx》由会员分享,可在线阅读,更多相关《java实验多线程开发.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验名称第 5次实验多线程开发一、实验目的.掌握所线程的概念;1 .掌握线程实现的两种方法;3、掌握对象锁和线程同步。二、实验内容1、编写程序,创建5个线程,分别输出5个线程的名字,用继承Thread类和实现Runnable 接口的方法来实现。2、以车站售票为例研究资源共享的问题。假设两个窗口同时出售一次列车的车票,车票就 是共享资源,两个窗口就是两个线程。3、编写程序,实现线程间的同步控制。假设有一个生产者(Producer), 一个消费者 (Consumer)。生产者产生0-9的整数,将它们存储在盒子(Box)对象中并打印出这些数。消费者从盒子中取出这些整数并将其也打印出来。同时要求生产者

2、产生一个数字,消费者 取得一个数字。三、实验过程1、编写程序,创建5个线程,分别输出5个线程的名字,用继承Thread类和实现Runnable 接口的方法来实现。(1)代码设计方法一:public class ThreadDemo extends Thread public ThreadDemo(String name) super(name);)public void run() for(int i=0;i100;i+) /System.out.printin(getName()+=+i);try (Thread.steep(int)(Math.random()*100);catch(Int

3、erruptedException e)System.out. printin(getName() + 结束);)public staticThread tlThread t2Thread t3Thread t4Thread t5void main(String args) =new ThreadDemo(“线程 A); =new ThreadDemo(线程 B); =new ThreadDemo(“线程 C); =new ThreadDemo,线程 D); =new ThreadDemo(“线程 E);tl.start();t2.start();t3.start();t4.start();)

4、方法二:publict5.start();class RunnableDemo implements Runnable public void run() for(int i=0;i100;i+) /System.out.printIn(Thread.currentThread().getName()+=+i);try Thread. steep( (int) (Math. rando/n( )*100);catch(InterruptedException e) System.out. println(Thread. currentThreadO .getName() + ”结束);publ

5、ic static void main(String args) RunnableDemo target=new RunnableDemo。; tl.start();ThreadThreadThreadThreadThreadtlt2t3t4t5newnewnewnewnewThreadDemo(“线程 A); ThreadDemo(“线程 B“); ThreadDemo,线程 Cn); ThreadDemo(“线程 D“); ThreadDemo(“线程 E);t2.start();t3.start();t4.start();t5.start();)(2)运行结果方法一:而一 Problem

6、s terminated: 线程C结束 线程B结束 线程E结束 线程A结束 线程D结束方法二:RRRR-R 吐口吐口吐口吐口吐口 登乡乡 D E c A B 口王口王口王口王口王 L 二/ L H 一了 、二K、二K 二B、二K 二K 线线线线线RRRR-R 吐口吐口吐口吐口吐口 登乡乡 D E c A B 口王口王口王口王口王 L 二/ L H 一了 、二K、二K 二B、二K 二K 线线线线线2、以车站售票为例研究资源共享的问题。假设两个窗口同时出售一次列车的车票,车票就 是共享资源,两个窗口就是两个线程。(1)代码设计public class Tickets private int amo

7、unt=100; public int getAmount() return amount;public void saleone() amount=amount-l;)public class WinThread extends Thread Tickets tickets=null;int n=0;public WinThread(Tickets ticketsString name) super(name);this.tickets=tickets;public void run() while(true) if(tickets.getAmount()0) tickets . saleo

8、ne(); n=n+l;System.out.printIn(getName()+:+n); try Thread.steep(50);catch(InterruptedException e) else Sy stem. out. print In (getName() + 已无票”); break; )public class TicketsTest public static void main(String args) Tickets tick=new Tickets();Thread winl=new WinThread(tick,窗口!”);Thread win2=new WinT

9、hread(tickJ窗口2); winl.start();win2.start();)(2)运行结果terminate言匚1:1言匚2:1 宣匚1:2盅匚2:2宙匚1:3宙匚2:3言匚1:4宣匚2:4支匚1:5窗匚2:5 窗匚1:6言二 2:6言匚1:7 言匚2:7盅匚1:8*2:8宙匚1:9言二2:9 $31:10变二2:10 窗匚1:11定二2:11 $31:12言二2:12直二1:13宣二 2:13宣匚1:14定二2:14言二 1:15宣二 2:15 克匚1:16定二2:16定二2:17言匚1:17言二2:18宣二1:18 zl:19宣匚2:19定二1:20官二 2:20 或二1:21

10、terminate言匚1:1言匚2:1 宣匚1:2盅匚2:2宙匚1:3宙匚2:3言匚1:4宣匚2:4支匚1:5窗匚2:5 窗匚1:6言二 2:6言匚1:7 言匚2:7盅匚1:8*2:8宙匚1:9言二2:9 $31:10变二2:10 窗匚1:11定二2:11 $31:12言二2:12直二1:13宣二 2:13宣匚1:14定二2:14言二 1:15宣二 2:15 克匚1:16定二2:16定二2:17言匚1:17言二2:18宣二1:18 zl:19宣匚2:19定二1:20官二 2:20 或二1:21$32:21 官二 1:22 定二 2:22 $31:23 童二 2:23 $31:24 童二 2:2

11、4 宙二 1:25 言二 2:25 童二 2:26 *1:26 11:27 官二 2:27 定二 1:28 官二 2:28 *1:29 言二 2:29 $zl:30 宣二 2:30 Wzl:31 官二 2:31 $zl:32 W=2:32 友二 1:33 定二 2:33 $z2:34 童二 1:34 宦二 2:35 $zl:35 言二 2:36 Wol:36 值二 2:37 支二 1:37 $z2:38 发二 1:38 WD1:39 $z2:39 窗二 1:40 官二2:40 童二工:41夜二 2:41 $zl:42宣二 2:42 $zl:43 z2:43夜二 1:44 童二 2:44$zl:

12、45 夜二 2:455zl:46 宣二 2:46 $zl:47夜二 2:47 931:48宣二 2:48 $zl:49夜二 2:49 窗二 1:50童二 2:50*1:51 3 2:51 窗二 1:52官二2三天亲 窗二1己无宗3、编写程序,实现线程间的同步控制。假设有一个生产者(Producer), 一个消费者 (Consumer)。生产者产生09的整数,将它们存储在盒子(Box)对象中并打印出这些数。消费者从盒子中取出这些整数并将其也打印出来。同时要求生产者产生一个数字,消费者 取得一个数字。(1)代码设计public class Box private int data;public s

13、ynchronized void put(int value) data=value;public synchronized int get() return data;)public class Producer extends Thread private Box box;public Producer(Box c) box=c;)public void run() for(int i=0;i10;i+) box.put(i);System.out.printIn(Producer+put:”+i);try (sLeep( (int) (Math .rando/w( )*100); cat

14、ch(InterruptedException e) ) )public class ProducerConsumerTest public static void main(String args) Box c=new Box();Producer pl=new Producer(c);Consumer cl=new Consumer(c);pl.start(); cl.start();)public class Consumer extends Thread private Box box;public Consumer(Box c)box=c;)public void run()int

15、value=0;for(int i=0;i10;i+) value=box.get(); System.out.println(Consumer+get:+value); tryseep(int)(Math.random()*100);catch (InterruptedException e) )public class Box2 private int data; private boolean available=false;public synchronized void put(int value) while(available=true) try wait();catch(Int

16、erruptedException e) data=value;available=true; notifyAll(); ) public synchronized int get() while(available=false) try wait();catch(InterruptedException e) available=false;notifyAll(); return data; (2)运行结果 Pro Consumerget:0 Producerput:0 Producerput:1 Consumerget:1 Producerput:2 Producerput:3 Consumerget:3 Consumerget:3 Consumerget:3 Producerput:4 Producerput:5 Producerput:6 Consumerget:6 Producerput:7 Consumerget:7 Producerput:8 Consumerget:8 Consumerget:8 Consumerget:8 Producerput:9四、实验小结本次实验我掌握了所线程的概念;掌握了线程实现的两种方法;掌握了对象锁和线程 同步。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁