![Java程序设计项目式教程(含实训任务单)习题答案 单元6 课后作业及参考答案_第1页](http://file4.renrendoc.com/view10/M00/3B/19/wKhkGWVyieGADQ0OAAFsojZxbSU005.jpg)
![Java程序设计项目式教程(含实训任务单)习题答案 单元6 课后作业及参考答案_第2页](http://file4.renrendoc.com/view10/M00/3B/19/wKhkGWVyieGADQ0OAAFsojZxbSU0052.jpg)
![Java程序设计项目式教程(含实训任务单)习题答案 单元6 课后作业及参考答案_第3页](http://file4.renrendoc.com/view10/M00/3B/19/wKhkGWVyieGADQ0OAAFsojZxbSU0053.jpg)
![Java程序设计项目式教程(含实训任务单)习题答案 单元6 课后作业及参考答案_第4页](http://file4.renrendoc.com/view10/M00/3B/19/wKhkGWVyieGADQ0OAAFsojZxbSU0054.jpg)
![Java程序设计项目式教程(含实训任务单)习题答案 单元6 课后作业及参考答案_第5页](http://file4.renrendoc.com/view10/M00/3B/19/wKhkGWVyieGADQ0OAAFsojZxbSU0055.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课后作业一、填空题1.Runnable2.新生状态、就绪状态、阻塞状态、就绪状态3.OK4.D5.B6.B二、简答题1.什么是多线程?多线程与多进程的区别是什么?参考答案:多线程是指在一个程序中同时执行多个任务的能力。这些任务在独立的执行流中运行,并且可以并发地执行。多进程是指运行多个程序实例,多进程能够充分利用操作系统的多任务管理器,确保每个工作进程始终处于最大工作效率状态。而多线程是运行在同一个进程中,同一进程中的所有线程可以访问相同的全局变量和系统资源。怎样解决线程的并发访问问题?参考答案:①通过线程同步解决:使用synchronized关键字限制多个线程同时访问共享资源的权限,避免多个线程同时修改同一份数据而导致数据不一致的问题。②通过线程通信解决:使用wait()和notify()方法来协调多个线程之间的操作。这可以确保在特定条件下,只有一个线程能够访问共享资源,从而避免数据竞争和死锁等问题。线程有哪些状态?它们之间是如何进行转换的?参考答案:线程的整个生命周期可以包含:新生状态(New)、就绪状态(Runnable)、运行状态(Running)、被阻塞状态(Blocked)、死亡状态(Dead)下五个状态。什么是死锁?如何防止死锁出现?参考答案:死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。当下面四个条件同时满足时,就会发生死锁。1)互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用。2)不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占用者主动释放。3)请求和保持,即当资源的请求者在请求其他的资源的同时保持对原有资源的占有。4)循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了一个等待环路。防止死锁的途径就是不能让满足死锁的条件同时发生。三、编程题1.建立两个Thread的子类,一个在run()方法中调用wait(),另一个在run()方法休眠几秒后对第一个线程调用notifyAll(),使第一个线程能输出一条信息。参考代码:publicclassTest{publicstaticvoidmain(String[]args){Objectlock=newObject();WaitThreadwaitThread=newWaitThread("WaitThread",lock);NotifyThreadnotifyThread=newNotifyThread("NotifyThread",lock);waitThread.start();notifyThread.start();}}publicclassNotifyThreadextendsThread{privateObjectlock;publicNotifyThread(Stringname,Objectlock){super(name);this.lock=lock;}@Overridepublicvoidrun(){try{Thread.sleep(3000);//休眠3秒synchronized(lock){lock.notifyAll();}}catch(InterruptedExceptione){e.printStackTrace();}}}publicclassWaitThreadextendsThread{privateObjectlock;publicWaitThread(Stringname,Objectlock){super(name);this.lock=lock;}@Overridepublicvoidrun(){try{synchronized(lock){lock.wait();System.out.println(Thread.currentThread().getName()+"接收到通知,结束");}}catch(InterruptedExceptione){e.printStackTrace();}}}修改任务6.2的需求,加入多个服务员,并能够指明是谁得到了某个食物。注意在这个例子中必须使用notifyAll()方法,而不是notify()方法。参考代码:publicclassRestaurant{ publicFoodfood;//声明食物类 publicstaticvoidmain(String[]args){ Restaurantrestaurant=newRestaurant(); WaitPersonwaitPerson=newWaitPerson(restaurant,"服务员1"); WaitPersonwaitPerson2=newWaitPerson(restaurant,"服务员2"); Chefchef=newChef(restaurant); }}classFood{ privatestaticinti=0;//i用于生成累计计数 privateintcount=++i;//count计数 publicFood(){ if(count>6){//超出6份,则无法再继续 System.out.println("Outoffood,closing!"); System.exit(0); } } publicStringtoString(){ return"food"+count; }}classWaitPersonextendsThread{ privateRestaurantrestaurant; publicWaitPerson(Restaurantr,Stringname){ super(name); restaurant=r; start();//启动线程 } publicvoidrun(){ while(true){ while(restaurant.food==null){//如果厨师没有准备好食物 synchronized(restaurant){//进入等待模式,直到被Chef的notify()方法唤醒 try{ restaurant.wait(); }catch(InterruptedExceptione){ e.printStackTrace(); } System.out.println(this.getName()+"Waitpersongot"+restaurant.food);//拿到厨师准备好的食物 restaurant.food=null;//等待厨师准备下个食物 } } } }}classChefextendsThread{ privateRestaurantrestaurant; privateWaitPersonwaitPerson; publicChef(Restaurantr){ restaurant=r; start();//启动线程 } publicvoidrun(){ while(true){ if(restaurant.food==null){//如果服务员需要食物 restaurant.food=newFood();//制作新食物 System.out.println("foodup!"); synchronized(restaurant){ restaurant.notifyAll();//唤醒服务员可以取食物 } } try{ sleep(1000); }catch(InterruptedExceptione){ e.printStackTrace(); } } }}使用继承Thread类的方法实现一个多线程程序,该程序先后启动三个线程。每个线程首先输出一条创建信息,然后休眠一段时间,最后打印出结束信息并退出。publicclassTest{publicstaticvoidmain(String[]args){MyThreadthread1=newMyThread("Thread-1",1000);MyThreadthread2=newMyThread("Thread-2",2000);MyThreadthread3=newMyThread("Thread-3",3000);thread1.start();thread2.start();thread3.start();}}publicclassMyThreadextendsThread{privateStringthreadName;privateintsleepTime;publicMyThread(Stringname,intsleepTime){threadName=name;this.sleepTime=sleepTime;}@Overridepublicvoidrun(){System.out.println(threadName+"开始创建...");try{Thread.sleep(sleepTime);System.out.println(threadName+"创建完毕,准备休眠...");Thread.sleep(sleepTime);System.out.println(threadName+"休眠结束,准备退出...");}catch(InterruptedExceptione){e.printStackTrace();}}}4.用实现Runnable接口的方法实现上面的题目。参考代码:publicclassTest{publicstaticvoidmain(String[]args){Threadthread1=newThread(newMyRunnable("Thread-1",1000));Threadthread2=newThread(newMyRunnable("Thread-2",2000));Threadthread3=newThread(newMyRunnable("Thread-3",3000));thread1.start();thread2.start();thread3.start();}}packagechapter6_4;publicclassMyRunnableimplementsRunnable{privateStringthreadName;privateintsleepTime;publicMyRunnable(Stringname,intsleepTime){threadName=name;this.sleepTime=sleepTime;}@Overridepublicvoidrun(){System.out.println(threadName+"开始创建...");try{
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB35T 2237-2024海洋动物性水产蛋白肽粉加工技术规范
- 产品推广合作合同范本
- 个人借款居间代理合同
- 个人设备租赁合同模板()
- 个体用工劳动合同范本
- 中医教育培训合同公证书
- 个人商品房预售合同范本
- 二手汽车买卖合同(简化版)
- 中小企业劳动合同签订趋势分析
- 云计算服务与域名注册代理合同
- 2025年合资经营印刷烟包盒行业深度研究分析报告
- 天津市五区县重点校2024-2025学年高一上学期1月期末联考试题 化学 含答案
- 吉林省吉林市普通中学2024-2025学年高三上学期二模试题 生物 含答案
- 2025年湖南省通信产业服务限公司春季校园招聘76人高频重点提升(共500题)附带答案详解
- 《电影之创战纪》课件
- 2024-2025学年人教版五年级(上)英语寒假作业(一)
- 开题报告-铸牢中华民族共同体意识的学校教育研究
- 2025届贵州省六盘水市第二中学高三适应性调研考试数学试题含解析
- 浙江省五校镇海中学2025届高考考前模拟数学试题含解析
- 2024-2025学年度高三年级11月联考试题及答案
- 公司2025年会暨员工团队颁奖盛典携手同行共创未来模板
评论
0/150
提交评论