您好,欢迎访问三七文档
第八章Java多线程技术1、程序如下:publicclassBorleyextendsThread{publicstaticvoidmain(String[]argv){Borleyb=newBorley();b.start();}publicvoidrun(){System.out.println(Running);}}下面描述正确的是:(B)单选A)通过编译和运行但是没有任何输出。B)通过编译,运行后输出RunningC)编译出错,没有线程可供运行D)编译出错,没有权限使用Thread2、编写程序,启动1000个线程,每个线程给初值为0的变量sum加1。(提示,需要通过引用传递,将sum传递给每个线程,为了能够进行引用传递,需要定义一个Integer包装对象来保存sum)。publicclassMyThraedimplementsRunnable{publicintnum=0;@Overridepublicsynchronizedvoidrun(){num=num+1;System.out.println(Thread.currentThread().getName()+num=+num);}}packagehomework8_2;publicclassHomeWork8_2{publicstaticvoidmain(String[]args){inta=0;Threadth[]=newThread[1000];MyThraedt=newMyThraed();for(inti=0;i1000;i++){th[i]=newThread(t,线程+(i+1));}for(inti=0;i1000;i++){th[i].start();}}}3、利用多线程技术模拟龟兔赛跑的场面。提示:先设计一个线程类模拟两个参与赛跑的选手的行为;然后创建该类的两个对象分别代表乌龟和兔子;让兔子跑快些,但在路上睡眠休息时间长些,而乌龟跑慢些却不休息;当某个选手到达终点时其线程运行结束;二个选手均到达终点时,显示并祝贺获胜选手,然后主线程结束。packagehomework8_3;publicclassRunnerimplementsRunnable{privateintspeed;privateintlength;privateintsleeptime;publicRunner(){}publicRunner(intspeed,intlength,intsleep){this.speed=speed;this.sleeptime=sleep;this.length=length;}@Overridepublicvoidrun(){intl=0;while(lthis.length){l+=speed;try{Thread.sleep((int)this.sleeptime);System.out.println(Thread.currentThread().getName()+休息!休息时间:+this.sleeptime);}catch(InterruptedExceptione){System.out.println(出错);}System.out.println(Thread.currentThread().getName()+已经走了里程:+l);}}}packagehomework8_3;publicclassHomeWork8_3{publicstaticvoidmain(String[]args){Runnerg=newRunner(20,100,1);Runnert=newRunner(50,100,20);newThread(g,乌龟).start();newThread(t,兔子).start();System.out.println(主线程结束!);}}run:主线程结束!乌龟休息!休息时间:1乌龟已经走了里程:20乌龟休息!休息时间:1乌龟已经走了里程:40乌龟休息!休息时间:1乌龟已经走了里程:60乌龟休息!休息时间:1乌龟已经走了里程:80乌龟休息!休息时间:1乌龟已经走了里程:100兔子休息!休息时间:20兔子已经走了里程:50兔子休息!休息时间:20兔子已经走了里程:100第九章网络编程1、关于数据报通信(UDP)和流式通信(TCP)的论述,正确的有:(选择1项)A)TCP和UDP在很大程度上是一样的,由于历史原因产生了两个不同的名字而已B)TCP和UDP在传输方式上是一样的,都是基于流的但是TCP可靠,UDP不可靠C)TCP和UDP使用的都是IP层所提供的服务D)用户不可以使用UDP来实现TCP的功能C)TCP和UDP使用的都是IP层所提供的服务2、说明程序功能。//程序有点错,ArrayList不推荐像数组指定单位访问,要get(indexx);packagesimpletalkserver;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.ArrayList;publicclassSimpleTalkServer{//存放所有通信线程publicstaticArrayListClientallClient=newArrayList(10);publicstaticintclientnum=0;//连接客户数publicstaticvoidmain(Stringargs[]){Clienty;try{ServerSockets=newServerSocket(5432);while(true){Sockets1=s.accept();//等待客户连接DataOutputStreamdos=newDataOutputStream(s1.getOutputStream());DataInputStreamdin=newDataInputStream(s1.getInputStream());Clientx=newClient(clientnum,dos,din);allClient.add(x);y=allClient.get(clientnum);y.start();clientnum++;}}catch(IOExceptione){}}}classClientextendsThread{intid;//客户标识DataOutputStreamdos;//去往客户的输出流DataInputStreamdin;//来自客户的输入流Clienty;publicClient(intid,DataOutputStreamdos,DataInputStreamdin){this.id=id;this.dos=dos;this.din=din;}@Overridepublicvoidrun(){while(true){try{Stringmessage=din.readUTF();intm=SimpleTalkServer.clientnum;for(inti=0;im;i++){y=SimpleTalkServer.allClient.get(i);y.dos.writeUTF(message);}}catch(IOExceptione){}}}}服务器通过5432端口监听客户机,并在每一个客户机连接后,把该客户发给服务器的信息发给以前所有连接的客户机。3、编写一个程序,使两个用户可以互相聊天。其中一个用户作为客户端,另一个作为服务器端,服务器端有两个文本域:一个用于输入文本,一个用于接收文本,按下Enter键后,即将信息发往客户端。客户端同样的功能。/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*/packagemyserver;importjava.io.*;importjava.net.ServerSocket;importjava.net.Socket;publicclassMyServerimplementsRunnable{ServerSocketserver=null;SocketclientSocket;//负责当前线程中C/S通信中的Socket对象booleanflag=true;//标记是否结束ThreadconnenThread;//向客户端发送信息的线程BufferedReadersin;//输入流对象DataOutputStreamsout;//输出流对象publicstaticvoidmain(String[]args){MyServerMS=newMyServer();MS.serverStart();}publicvoidserverStart(){try{server=newServerSocket(8080);//建立监听服务System.out.println(端口号:+server.getLocalPort());while(flag){clientSocket=server.accept();System.out.println(连接已经建立完毕!);InputStreamis=clientSocket.getInputStream();sin=newBufferedReader(newInputStreamReader(is));OutputStreamos=clientSocket.getOutputStream();sout=newDataOutputStream(os);connenThread=newThread(this);connenThread.start();//启动线程,向客户端发送信息StringaLine;while((aLine=sin.readLine())!=null)//从客户端读入信息{System.out.println(客户发来信息:+aLine);if(aLine.equals(bye)){flag=false;connenThread.interrupt();//线程中断break;}}sout.close();//关闭流os.close();sin.close();is.close();clientSocket.close();//关闭Socket连接System.exit(0);//程序运行结束}}catch(Exceptione){System.out.println(e);}}publicvoidrun(){while(true){try{intch;while((ch=System.in.read())!=-1){//从键盘接收字符并向客户端发送sout.write((byte)ch);if(ch=='\n'){sout.flush();}}}catch(Exceptione){System.out.println(e);}}}publicvoidfinalize()//析构方法{try{server.close();}//停止ServerSocket服务catch(IOExceptione){System.out.println(e);}}}/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*/packagemyserver;importjava.io.*;importjava.net.Socket;publicclassMyClientimplementsRunnable{SocketclientSocket;booleanflag=true;//标记是否结束ThreadconnenThread;//用于向服务器端发送信息Buffere
本文标题:JAVA第三次作业
链接地址:https://www.777doc.com/doc-5411500 .html