java多线程实验报告.docx

上传人:b****4 文档编号:26782588 上传时间:2023-06-22 格式:DOCX 页数:7 大小:17.18KB
下载 相关 举报
java多线程实验报告.docx_第1页
第1页 / 共7页
java多线程实验报告.docx_第2页
第2页 / 共7页
java多线程实验报告.docx_第3页
第3页 / 共7页
java多线程实验报告.docx_第4页
第4页 / 共7页
java多线程实验报告.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

java多线程实验报告.docx

《java多线程实验报告.docx》由会员分享,可在线阅读,更多相关《java多线程实验报告.docx(7页珍藏版)》请在冰豆网上搜索。

java多线程实验报告.docx

java多线程实验报告

java多线程实验报告

篇一:

西北农林科技大学java多线程实验报告

  实验7多线程

  1.实验目的

  

(1)掌握Java多线程的概念和实现方法

  

(2)掌握Java多线程的同步问题

  2.实验内容

  任务一:

火车售票

  假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒买一张票。

打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。

程序运行结果见左图。

  打开Eclipse

  Tickets.java

  publicclassTicketextendsThread{

  intticket=1000;Stringname="";publicvoidrun(){while(true){synchronized(name){if(ticket  "第"+Thread.currentThread().getName()+"售票点卖出了第"+ticket--+"张票");

  }

  }}

  }}try{}catch(InterruptedExceptione){}Thread.sleep(100);

  Test.java

  publicclassTest{

  }publicstaticvoidmain(Stringargs[]){}Tickett=newTicket();newThread(t,"1").start();newThread(t,"2").start();newThread(t,"3").start();newThread(t,"4").start();newThread(t,"5").start();newThread(t,"6").start();newThread(t,"7").start();newThread(t,"8").start();newThread(t,"9").start();newThread(t,"10").start();

  任务二:

银行存款

  假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总额。

现有两个顾客,每人都分3次,每次100元将钱到入。

试编写一个程序,模拟实际作业。

  程序如下:

  classCBank

  {privatestaticintsum=0;

  publicstaticvoidadd(intn){

  inttmp=sum;

  tmp=tmp+n;//累加汇款总额

  try{

  Thread.sleep((int)(10000*Math.random()));//小睡几秒钟

  }

  catch(InterruptedExceptione){}

  sum=tmp;

  "sum="+sum);

  }

  }

  classCCustomerextendsThread//CCustomer类,继承自Thread类

  {publicvoidrun(){//run()method

  for(inti=1;i  CBank.add(100);//将100元分三次汇入

  }

  }

  publicclassEx7_1

  {publicstaticvoidmain(Stringargs[])

  {CCustomerc1=newCCustomer();

  CCustomerc2=newCCustomer();

  c1.start();c2.start();

  }

  }

  [基本要求]运行程序5次,观察每次运行结果是否相同。

  [思考问题]运行结果每次是否相同,运行时间是否相同,为什么?

  ①要使程序运行结果每次相同,应该怎样修改程序?

  ②程序中为什么要使用异常处理?

  答:

运行程序5次,观察每次运行结果不相同:

  运行结果每次是否相同,运行时间不相同,因为程序不同步。

  ①为了使程序运行结果每次相同,程序修改如下:

  CBank.java

  classCBank

  {privatestaticintsum=0;

  publicsynchronizedstaticvoidadd(intn){

  inttmp=sum;

  tmp=tmp+n;//累加汇款总额

  try{

  Thread.sleep((int)(10000*Math.random()));//小睡几秒钟}

  catch(InterruptedExceptione){}

  sum=tmp;

  "sum="+sum);

  }

  }

  CCustomer.java

  classCCustomerextendsThread//CCustomer类,继承自Thread类

  {publicvoidrun(){//run()method

  for(inti=1;i  CBank.add(100);//将100元分三次汇入

  }

  }

  Ex7_1.java

  publicclassEx7_1

  {publicstaticvoidmain(Stringargs[])

  {CCustomerc1=newCCustomer();

  CCustomerc2=newCCustomer();

  c1.start();

  c2.start();

  }

  }

  运行结果如下:

  ②程序中为什么要使用异常处理?

  程序执行时经常会出现除零溢出、数组越界等运行错误,影响程序的正常执行。

Java语言通过面向对象的异常处理机制来解决运行期间的错误,可以预防错误的程序代码或系统错误所造成的不可预期的结果发生。

减少编程人员的工作,增加了程序的灵活性,增加程序的可读性和健壮性.

  任务三:

生产者和消费者问题

  生产者生产面包,消费者消费面包,“生产”和“消费”各代表一个进程,当生产者没有生产出面包的时候,消费者不能消费面包。

当消费者没有消费完面包的时候,生产者不能再生产。

程序效果如下:

  程序要求:

  一次生产5个面包,一次消费5个面包。

  注同步机制,wait()方法,notify()方法的使用。

  启动Eclipse:

  程序代码如下:

  Bread.java

  publicclassBreadimplementsRunnable{

  intsum=0;Bread(intn){sum=n;}voidpro(){while(sum  "个");

  }

  "生产完毕。

");

  "开始消费--");

  notifyAll();

  }

  voidcon(){

  if(sum  "还没有生产出面包,等待中--");try{wait();}catch(InterruptedExceptione){}for(inti=0;i  "消费完毕。

");}

  publicsynchronizedvoidbread(intk){}publicvoidrun(){if(Thread.currentThread().getName().equals("produce")){"启动消费");bread(-1);if(k==1){}con();pro();if(k==-1){}}if(Thread.currentThread().getName().equals("consume")){"开始生产--");bread

(1);}}}

  Wt.java

  publicclassWt{

  publicstaticvoidmain(Stringargs[]){

  Breadbread=newBread(0);Threadthread1=newThread(bread);Threadthread2=newThread(bread);thread1.setName("produce");

篇二:

Java多线程实验报告

  实验4:

Java多线程

  实验时间:

实验地点:

  一、实验目的及要求

  

(1)了解线程的概念。

  

(2)学习简单的多线程编程。

  二、实验设备环境及要求

  三、实验任务

  

(1)阅读给定的JavaApplication程序,按要求回答问题并写出运行结果。

  

(2)按要求编写一个JavaApplication程序,并编译、运行这个程序。

  四、实验内容与步骤

  1.输入下面的JavaApplication程序,运行该程序,并简要分析程序的运行结果。

1:

classSimpleThreadextendsThread{

  2:

publicSimpleThread(Stringstr){

  3:

super(str);//调用其父类的构造方法

  4:

  5:

  6:

  7:

  8:

  9:

  10:

  11:

  12:

  13:

  14(本文来自:

小草范文网:

java多线程实验报告):

  15:

  16:

  17:

  18:

}}publicvoidrun(){//重写run方法for(inti=0;i  1:

publicclassTwoThreadsTest{

  2:

publicstaticvoidmain(Stringargs[]){

  3:

newSimpleThread("First").start();

  4:

//第一个线程的名字为First

  5:

newSimpleThread("Second").start();

  6:

//第二个线程的名字为Second

  7:

  8:

}

  }

  2.编写程序,将上面多线程程序用Runnable接口来实现。

  classSimpleThreadimplementsRunnable{

  publicvoidrun(){

  for(inti=0;i  +""+Thread.currentThread().getName());try{

  Thread.sleep((int)(Math.random()*1000));

  //线程睡眠,把控制权交出去

  }

  catch(InterruptedExceptione){}

  }

  "DONE!

"+Thread.currentThread().getName());//线程执行结束

  }

  }

  publicclassTest{

  publicstaticvoidmain(Stringargs[]){

  /*Threadt1=newThread("First");

  //第一个线程的名字为First

  Threadt2=newThread("Second");

  //第二个线程的名字为Second

  t1.start();

  t2.start();*/

  newThread(newSimpleThread(),"First").start();

  newThread(newSimpleThread(),"Second").start()

  }

  }

篇三:

java线程实验报告—反弹球

  《Java程序设计》实验报告

  班级:

学号:

姓名:

  1.题目

  

(一).编写Applet程序,其中包含一个滚动的字符串,字符串从左到右运动,当所有的字符都从屏幕的右边消失后,字符串重新从左边出现并继续向右移动。

  

(二).编写一个Applet内部显示一个蓝色反弹球的程序,通过一个事件使该球开始运动,在该球撞击Applet边框时,它应从边框弹回并以相反的方向运动。

  2.目的和要求

  

(1)掌握实现线程有两种方法:

1.实现Ruannable接口2.继承Thread类

(2)学会线程的创建,run()方法的调用,在stop()方法中终止线程。

  3.源程序

  实验

(二)源程序:

  importjava.awt.*;importjava.applet.*;

  publicclassextendsAppletimplementsRunnable{

  intX,Y;

  publicThread2(){}

  Threadm_Draw=null;

  publicvoidinit(){

  m_Draw=newThread(this);}

  publicvoidpaint(Graphicsg){

  g.setColor(Color.pink);g.fillOval(X,Y,20,20);

  }

  publicvoidstart(){

  m_Draw.start();try{

  Thread.sleep(50);

  }catch(InterruptedExceptione){}}

  publicvoidstop(){

  if(m_Draw.isAlive())m_Draw}

  publicvoidrun(){

  intdx=(int)(Math.random()*10)%2+3;intdy=(int)(Math.random()*10)%2+3;try{

  while(true){

  X=X+dx;Y=Y+dy;

  }

  if(Y>getHeight()-40||Y  if(X>getWidth()-40||X  Thread.sleep(100);}

  }catch(InterruptedExceptione){}}

  4.数据结果

  实验

(一)结果:

  实验

(二)数据:

  5.实验心得与体会

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1