西北农林科技大学java多线程实验报告Word文档格式.docx

上传人:b****3 文档编号:17346956 上传时间:2022-12-01 格式:DOCX 页数:20 大小:226.99KB
下载 相关 举报
西北农林科技大学java多线程实验报告Word文档格式.docx_第1页
第1页 / 共20页
西北农林科技大学java多线程实验报告Word文档格式.docx_第2页
第2页 / 共20页
西北农林科技大学java多线程实验报告Word文档格式.docx_第3页
第3页 / 共20页
西北农林科技大学java多线程实验报告Word文档格式.docx_第4页
第4页 / 共20页
西北农林科技大学java多线程实验报告Word文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

西北农林科技大学java多线程实验报告Word文档格式.docx

《西北农林科技大学java多线程实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《西北农林科技大学java多线程实验报告Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。

西北农林科技大学java多线程实验报告Word文档格式.docx

}

}

}

Test.java

publicclassTest{

publicstaticvoidmain(Stringargs[]){

Tickett=newTicket();

newThread(t,"

1"

).start();

2"

3"

4"

5"

6"

7"

8"

9"

10"

任务二:

银行存款

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

现有两个顾客,每人都分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<

=3;

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;

System.out.println("

CCustomer.java

{publicvoidrun(){//run()method

for(inti=1;

CBank.add(100);

Ex7_1.java

CCustomerc2=newCCustomer();

c1.start();

运行结果如下:

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

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

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

任务三:

生产者和消费者问题

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

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

程序效果如下:

程序要求:

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

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

启动Eclipse:

程序代码如下:

Bread.java

publicclassBreadimplementsRunnable{

intsum=0;

Bread(intn){sum=n;

voidpro(){

while(sum<

5){

sum=sum+1;

System.out.println(sum+"

个"

生产完毕。

开始消费--"

notifyAll();

voidcon(){

if(sum<

System.out.println("

还没有生产出面包,等待中--"

try{

wait();

catch(InterruptedExceptione){}

}

for(inti=0;

5;

i++){

System.out.println(sum+"

sum=sum+(-1);

消费完毕。

publicsynchronizedvoidbread(intk){

if(k==1){

pro();

if(k==-1){

con();

if(Thread.currentThread().getName().equals("

produce"

)){

启动消费"

bread(-1);

consume"

开始生产--"

bread

(1);

Wt.java

publicclassWt{

publicstaticvoidmain(Stringargs[]){

Breadbread=newBread(0);

Threadthread1=newThread(bread);

Threadthread2=newThread(bread);

thread1.setName("

thread2.setName("

thread1.start();

thread2.start();

实验8

(1)掌握Socket通信

(2)掌握UDP通信

InetAddress类练习

使用InetAddress类的方法获取的主机的IP地址;

获取本地机的名称和IP地址。

程序运行结果如图所示:

 

import.*;

publicstaticvoidmain(Stringargs[]){

try{

InetAddressaddress_1=InetAddress.getByName("

学校的IP地址:

+address_1.getHostAddress());

InetAddressaddress_2=InetAddress.getLocalHost();

本机的IP地址:

+address_2.getHostAddress());

本机的名称"

+address_2.getHostName());

catch(UnknownHostExceptione){

System.out.println(e);

}

Socket类和ServerSocket类练习

利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。

客户端向服务器端发送“Time”命令,服务器端接受到该字符串后将服务器端当前时间返回给客户端;

客户端向服务器端发送“Exit”命令,服务器端向客户端返回“Bye”后退出。

基本要求:

编写完整程序;

两人一组,一个作为服务器端,另一人作为客户端。

服务器端和客户端都需要打印出接受到的消息和发出的命令。

程序运行结果如下:

客户端服务器端

Client.java

importjava.io.*;

publicclassClient{

publicstaticvoidmain(Stringargs[])

{

Socketmysocket;

DataInputStreamin=null;

DataOutputStreamout=null;

mysocket=newSocket("

127.0.0.1"

4331);

in=newDataInputStream(mysocket.getInputStream());

out=newDataOutputStream(mysocket.getOutputStream());

Strings1="

Time"

out.writeUTF(s1);

Thread.sleep(500);

Strings=in.readUTF();

//in读取信息,堵塞状态

客户收到:

+s);

out.writeUTF("

exit"

Strings2=in.readUTF();

+s2);

return;

catch(Exceptione){

服务器已断开"

+e);

Server.java

importjava.util.*;

importjava.text.SimpleDateFormat;

publicclassServer{

ServerSocketserver=null;

Socketyou=null;

try{server=newServerSocket(4331);

catch(IOExceptione1){

System.out.println(e1);

System.out.println("

等待客户呼叫"

you=server.accept();

//堵塞状态,除非有客户呼叫

out=newDataOutputStream(you.getOutputStream());

in=newDataInputStream(you.getInputStream());

Stringc=in.readUTF();

//in读取信息,堵塞状态

服务器收到:

+c);

Datenow=newDate();

SimpleDateFormatdateFormat=newSimpleDateFormat("

yyyy/MM/ddHH:

mm:

ss"

Stringhehe=dateFormat.format(now);

out.writeUTF(hehe);

Stringc1=in.readUTF();

+c1+"

,退出程序"

Bye!

客户已断开"

运行结果:

DatagramSocket类和DatagramPacket类练习

编写一个数据报通信程序,实现简单的聊天功能。

基本要求:

两人一组编写完整程序。

为了给大家减轻负担,Swing部分的代码已给出。

(请同学们到作业管理系统下载Lab8.zip中的UDPmessage.java)

importjava.awt.*;

importjava.awt.event.*;

importjava.io.IOException;

importjavax.swing.*;

publicclassUDPmessageextendsJFrameimplementsActionListener,Runnable{

privateJTextAreatext;

privateJTextFieldipText;

privateJTextFieldsendText;

privateJButtonbutton;

privateDatagramSocketsocket;

privateJScrollBarvsBar;

Threadthread;

publicUDPmessage(){

setTitle("

UDP聊天程序"

setBounds(100,100,400,300);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLayout(newBorderLayout());

text=newJTextArea();

text.setEditable(false);

JScrollPanetextPanel=newJScrollPane(text);

vsBar=textPanel.getVerticalScrollBar();

add(textPanel,BorderLayout.CENTER);

JPanelpanel=newJPanel();

BorderLayoutpanelLayout=newBorderLayout();

panelLayout.setHgap(5);

panel.setLayout(panelLayout);

ipText=newJTextField("

172.17.90.216"

panel.add(ipText,BorderLayout.WEST);

sendText=newJTextField();

panel.add(sendText,BorderLayout.CENTER);

button=newJButton("

发送"

panel.add(button,BorderLayout.EAST);

add(panel,BorderLayout.SOUTH);

setVisible(true);

server();

button.addActionListener(this);

privatevoidserver(){

thread=newThread(this);

thread.start();

publicvoidactionPerformed(ActionEventev){

bytebuffer[]=(InetAddress.getLocalHost().getHostAddress()+"

\n"

+sendText.getText().trim()+"

\n"

).getBytes();

InetAddressaddress1=InetAddress.getByName(ipText.getText().trim());

InetAddressaddress2=InetAddress.getLocalHost();

DatagramPacketdatapack=newDatagramPacket(buffer,buffer.length,address1,8888);

DatagramSocketmaildata=newDatagramSocket();

maildata.send(datapack);

text.append(InetAddress.getLocalHost().getHostAddress()+"

sendText.setText(null);

}catch(Exceptionee){

ee.printStackTrace();

DatagramPacketpack=null;

DatagramSocketmaildata=null;

byte[]data=newbyte[8192];

try{

pack=newDatagramPacket(data,data.length);

maildata=newDatagramSocket(8888);

}catch(Exceptionee){

ee.printStackTrace();

if(maildata==null)

break;

else

maildata.receive(pack);

Stringmessage=newString(pack.getData(),0,pack.getLength());

text.append(message);

}catch(Exceptionee){

ee.printStackTrace();

JFrameframe=newUDPmessage();

任务四:

传输对象输入与输出流

现有一个Student类(请同学们到作业管理系统下载Lab8.zip):

程序实现:

从服务器端传输一个Student对象到客户端

使用Socket类和ServerSocket类实现

客户端程序运行结果如图所示:

publicclassClient

{

DatagramSocketmail_data=null;

bytedata[]=newbyte[8192];

try

{pack=newDatagramPacket(data,data.length);

mail_data=newDatagramSocket(3224);

catch(Exceptione){};

{mail_data.receive(pack);

System.out.println(message);

catch(Exceptione){}

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

当前位置:首页 > 高等教育 > 法学

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

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