1、 Test.javapublic class Test public static void main(String args) Ticket t = new Ticket(); new Thread(t,1).start();2345678910任务二:银行存款假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总额。现有两个顾客,每人都分3次,每次100元将钱到入。试编写一个程序,模拟实际作业。程序如下:classCBank private static int sum=0;public static void add(int n)inttmp=sum;tmp=tmp+n; /
2、 累加汇款总额tryThread.sleep(int)(10000*Math.random(); / 小睡几秒钟catch(InterruptedException e) sum=tmp;sum= +sum); class CCustomer extends Thread / CCustomer类,继承自Thread类 public void run() / run() methodfor(inti=1;i=3;i+)CBank.add(100); / 将100元分三次汇入public class Ex7_1 public static void main(String args) CCust
3、omer c1=new CCustomer();CCustomer c2=new CCustomer();c1.start(); c2.start(); 基本要求 运行程序5次,观察每次运行结果是否相同。思考问题 运行结果每次是否相同,运行时间是否相同,为什么?要使程序运行结果每次相同,应该怎样修改程序?程序中为什么要使用异常处理?答:运行程序5次,观察每次运行结果不相同:运行结果每次是否相同,运行时间不相同,因为程序不同步。为了使程序运行结果每次相同,程序修改如下:CBank.javaclass CBank private static int sum=0; public synchroni
4、zed static void add(int n) int tmp=sum; tmp=tmp+n; try Thread.sleep(int)(10000*Math.random(); catch(InterruptedException e) sum=tmp; System.out.println(CCustomer.java public void run() / run() method for(int i=1; CBank.add(100);Ex7_1.java CCustomer c2=new CCustomer(); c1.start();运行结果如下: 程序执行时经常会出现除零
5、溢出、数组越界等运行错误,影响程序的正常执行。Java语言通过面向对象的异常处理机制来解决运行期间的错误,可以预防错误的程序代码或系统错误所造成的不可预期的结果发生。减少编程人员的工作,增加了程序的灵活性,增加程序的可读性和健壮性.任务三:生产者和消费者问题生产者生产面包,消费者消费面包,“生产”和“消费”各代表一个进程,当生产者没有生产出面包的时候,消费者不能消费面包。当消费者没有消费完面包的时候,生产者不能再生产。程序效果如下:程序要求:一次生产5个面包,一次消费5个面包。注同步机制,wait()方法,notify()方法的使用。启动Eclipse:程序代码如下:Bread.javapub
6、lic class Bread implements Runnable int sum=0; Bread(int n) sum=n; void pro() while(sum5) sum=sum+1; System.out.println(sum+个生产完毕。开始消费- notifyAll(); void con() if(sum System.out.println(还没有生产出面包,等待中- try wait(); catch(InterruptedException e) for(int i=0;5;i+) System.out.println(sum+ sum=sum+(-1);消费完
7、毕。 public synchronized void bread(int k) if(k=1) pro(); if(k=-1) con(); if(Thread.currentThread().getName().equals(produce)启动消费 bread(-1);consume开始生产- bread(1);Wt.javapublic class Wt public static void main(String args) Bread bread=new Bread(0); Thread thread1=new Thread(bread); Thread thread2=new T
8、hread(bread); thread1.setName( thread2.setName( thread1.start(); thread2.start();实验 8 (1)掌握Socket通信(2)掌握UDP通信InetAddress类练习使用InetAddress类的方法获取的主机的IP地址;获取本地机的名称和IP地址。程序运行结果如图所示:import .*; public static void main(String args) try InetAddress address_1=InetAddress.getByName(学校的IP地址:+ address_1.getHostA
9、ddress(); InetAddress address_2=InetAddress.getLocalHost();本机的IP地址:+address_2.getHostAddress();本机的名称+address_2.getHostName(); catch(UnknownHostException e) System.out.println(e); Socket类和ServerSocket类练习利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。客户端向服务器端发送“Time”命令,服务器端接受到该字符串后将服务器端当前时间返回给客户端;客户端向服务器端发送
10、“Exit”命令,服务器端向客户端返回“Bye”后退出。基本要求:编写完整程序;两人一组,一个作为服务器端,另一人作为客户端。服务器端和客户端都需要打印出接受到的消息和发出的命令。程序运行结果如下:客户端服务器端Client.javaimport java.io.*;public class Client public static void main(String args) Socket mysocket; DataInputStream in=null; DataOutputStream out=null; mysocket=new Socket(127.0.0.1,4331); in=
11、new DataInputStream(mysocket.getInputStream(); out=new DataOutputStream(mysocket.getOutputStream(); String s1=Time out.writeUTF(s1); Thread.sleep(500); String s=in.readUTF(); /in读取信息,堵塞状态客户收到:+s); out.writeUTF(exit String s2=in.readUTF();+s2); return; catch(Exception e) 服务器已断开+e);Server.javaimport j
12、ava.util.*;import java.text.SimpleDateFormat;public class Server ServerSocket server=null; Socket you=null; try server=new ServerSocket(4331); catch(IOException e1) System.out.println(e1); System.out.println(等待客户呼叫 you=server.accept(); /堵塞状态,除非有客户呼叫 out=new DataOutputStream(you.getOutputStream(); in
13、=new DataInputStream(you.getInputStream(); String c=in.readUTF(); / in读取信息,堵塞状态服务器收到:+c); Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat(yyyy/MM/dd HH:mm:ss String hehe = dateFormat.format( now ); out.writeUTF(hehe); String c1=in.readUTF();+c1+,退出程序Bye!客户已断开运行结果:DatagramSo
14、cket类和DatagramPacket类练习编写一个数据报通信程序,实现简单的聊天功能。基本要求:两人一组编写完整程序。为了给大家减轻负担,Swing部分的代码已给出。(请同学们到作业管理系统下载Lab8.zip中的UDPmessage.java)import java.awt.*;import java.awt.event.*;import java.io.IOException;import javax.swing.*;public class UDPmessage extends JFrame implements ActionListener,Runnable private JTe
15、xtArea text; private JTextField ipText; private JTextField sendText; private JButton button; private DatagramSocket socket; private JScrollBar vsBar; Thread thread; public UDPmessage() setTitle(UDP聊天程序 setBounds(100, 100, 400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new Borde
16、rLayout(); text = new JTextArea(); text.setEditable(false); JScrollPane textPanel = new JScrollPane(text); vsBar = textPanel.getVerticalScrollBar(); add(textPanel, BorderLayout.CENTER); JPanel panel = new JPanel(); BorderLayout panelLayout = new BorderLayout(); panelLayout.setHgap(5); panel.setLayou
17、t(panelLayout); ipText = new JTextField(172.17.90.216 panel.add(ipText, BorderLayout.WEST); sendText = new JTextField(); panel.add(sendText, BorderLayout.CENTER); button = new JButton(发送 panel.add(button, BorderLayout.EAST); add(panel, BorderLayout.SOUTH); setVisible(true); server(); button.addActio
18、nListener(this); private void server() thread=new Thread(this); thread.start(); public void actionPerformed(ActionEvent ev) byte buffer=(InetAddress.getLocalHost().getHostAddress()+n +sendText.getText().trim()+n).getBytes(); InetAddress address1=InetAddress.getByName(ipText.getText().trim(); InetAdd
19、ress address2=InetAddress.getLocalHost(); DatagramPacket datapack=new DatagramPacket(buffer,buffer.length,address1,8888); DatagramSocket maildata=new DatagramSocket(); maildata.send(datapack); text.append(InetAddress.getLocalHost().getHostAddress()+ sendText.setText(null); catch(Exception ee) ee.pri
20、ntStackTrace(); DatagramPacket pack=null; DatagramSocket maildata=null; byte data=new byte8192; try pack=new DatagramPacket(data,data.length); maildata=new DatagramSocket(8888); catch(Exception ee) ee.printStackTrace(); if(maildata=null) break; else maildata.receive(pack); String message=new String(
21、pack.getData(),0,pack.getLength(); text.append(message); catch(Exception ee) ee.printStackTrace(); JFrame frame = new UDPmessage();任务四:传输对象输入与输出流现有一个Student类(请同学们到作业管理系统下载Lab8.zip):程序实现:从服务器端传输一个Student对象到客户端使用Socket类和ServerSocket类实现客户端程序运行结果如图所示:public class Client DatagramSocket mail_data=null; byte data=new byte8192; try pack=new DatagramPacket(data,data.length); mail_data=new DatagramSocket(3224); catch(Exception e); mail_data.receive(pack); System.out.println(message); catch(Exception e)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1