多线程与Socketliyue-stu.pptx
《多线程与Socketliyue-stu.pptx》由会员分享,可在线阅读,更多相关《多线程与Socketliyue-stu.pptx(58页珍藏版)》请在三一办公上搜索。
1、1,class Super public int field=0;public int getField()return field;class Sub extends Super public int field=1;public int getField()return field;public int getSuperField()return super.field;public class FieldAccess public static void main(String args)Super sup=new Sub();/Upcast System.out.println(sup
2、.field=+sup.field+,sup.getField()=+sup.getField();Sub sub=new Sub();System.out.println(sub.field=+sub.field+,sub.getField()=+sub.getField()+,sub.getSuperField()=+sub.getSuperField();,sup.field=0,sup.getField()=1sub.field=1,sub.getField()=1,sub.getSuperField()=0,2,class FatherClass protected class Gi
3、ft public Gift()System.out.println(FatherClass.Gift();public void f()System.out.println(FatherClass.Gift.f();private Gift y=new Gift();public FatherClass()System.out.println(New FatherClass();public void insertGift(Gift yy)y=yy;public void g()y.f();public class SonClass extends FatherClass public cl
4、ass Gift extends FatherClass.Gift public Gift()System.out.println(SonClass.Gift();public void f()System.out.println(SonClass.Gift.f();public SonClass()insertGift(new Gift();public static void main(String args)FatherClass e2=new SonClass();e2.g();,FatherClass.Gift()New FatherClass()FatherClass.Gift()
5、SonClass.Gift()SonClass.Gift.f(),1,彼此独立,“同时”工作,线程与工作人员,什么是线程?,线程是一个程序(进程)内部的顺序控制流,必须依赖于进程中执行,一个进程可实现多个线程,同时完成不同的任务。多线程意味着一个程序的多行语句同时执行,并不是多次启动同一个程序。不同进程的代码、内部数据和状态都是独立的,而进程中的多线程是共享同一内存空间和同一系统资源,可能会相互影响。,线程两种实现方法:继承Thread类和继承Runnable接口,用继承方式创建线程,很简单,只需要继承类,并覆盖Thread类的run方法。Thread类有两个很重要的方法:run方法和star
6、t方法Run方法是加入需要执行代码的地方,是线程体,但不能直接调用,需要通过调用start方法启动线程(初始化相关资源)并运行run方法。,但是因为java不支持多继承,如果已经继承了其他类就无法在继承Thread类了。这样就要通过实现接口来创建线程了。,用实现接口方式创建线程,通过实现接口来创建多线程,该接口只有一个run方法,重写就好了。,但是,必须要调用Thread类构造方法public Thread(Runnable target)来创建Thread类的实例才能提供对多线程的支持。,下面是例子:,public class ThreadSynTest implements Runnabl
7、eprivate int num=10;public void doit()if(num0)try Thread.sleep(1000);catch(InterruptedException e)/TODO Auto-generated catch blocke.printStackTrace();System.out.println(tickets+-num);,Overridepublic void run()/重写run方法/TODO Auto-generated method stubwhile(true)doit();public static void main(String ar
8、gs)ThreadSynTest t=new ThreadSynTest();Thread a=new Thread(t);/新建线程Thread b=new Thread(t);Thread c=new Thread(t);Thread d=new Thread(t);a.start();/执行线程b.start();c.start();d.start();,tickets9tickets8tickets9tickets7tickets5tickets6tickets4tickets3tickets2tickets1tickets0tickets-1tickets-2,线程很简单,就是一个在
9、后台偷偷运行的“小(副)程序”,它的run()方法相当于主程序的main()方法,只不过要调用start()来启动它,也可以用一些指令将它暂停或者继续运行。其实我们天天都在接触线程,只不过我们的程序都是单线程(main方法)。新建一个线程并start()它,就相当于打开了一个新程序。多个线程一般平等地交叉运行,因为时间很短,故可以认为是同时运行。,想象一下,现在我们的程序是模拟银行的运行。如果只有一个工作人员负责接待成百上千名客户,并为他们办理业务,可不可行?当然不行,除非你的银行无论在什么时候都最多只有一位客户光临。现在有这样一个策略:假设员工休息室里有很多业务员在休息,当他们接到前台接待的
10、通知,就找一个业务员出去为客户办理业务,办理完了就回来休息。显然前台只要一个就够了,而柜台业务员则需要很多。,线程,简单来讲,是这样的单线程 多进程 多线程一个人对一个帖子 十个人对十个帖子一个人对十个帖子,创建线程,可以1.继承Thread类,重写run()方法,使用start()方法启动线程。class huaji extends Thread.public void run()水贴;.public static void main(String args)huaji xiaohuaji;xiaohuaji.start();,继承Thread类,以创建多线程,run()方法中说明这个线程要
11、执行什么(但不能直接调用,需要通过调用start方法启动线程(初始化相关资源)并运行run方法。),创建一个线程并执行run()里面的内容,2.实现Runnable接口中的run()方法,并通过Thread的构造方法public Thread(Runnable target)创建Thread实例class huaji implements Runnbale.public void run()水贴;.public static void main(String args)new Thread(new huaji).start();,创建一个Thread对象并执行其start()方法,2,接待客户
12、,呼唤柜台业务员,ServerSocket与前台,socket(摘自百科,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。课本中的Socket例子包含一个服务端和客户端。服务端通过监听某个端口,等待客户端的连接;客户端通过已知服务端的ip地址以及开放端口,连接到指定服务端。它们之间通过流的形式进行信息的交流。即把创建对方为自己的一个Socket实例,并通过输入和输出两个流通信。也就是说,现阶段我们要写好Socket,就要掌握Socket的连接以及
13、流的使用。后续代码参考课本,PS:其实服务端和客户端的区别在于服务端相对固定,客户端通过服务端的信息来找到他,开始交流。相当于楼主发了个帖子,大家进去批判他,而不是楼主去找大家谈人生。在交流方式上,是相同的。,一、简单理解Socket,(1)Socket是什么?socket=套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。-来自网络 个人理解 就是一条数据线的作用(不用想那么复杂),个人理解,服务器,客户端,创建并提供端口,链接上IP地址,再接端口,BufferedRead流(读入数据),PrintWr
14、iter流(发送数据),简单来说:,可以把socket想象为以下过程:服务器=房子 端口=房子里的插座 客户端=手机现在要把手机连上插座充电,那么你首先得走进房子(连接上服务器IP地址),再找到插座(端口),同时连接手机(客户端)和插座(端口)需要数据线(socket)作为中介,这样两边才能进行正常的数据交换。,PS:,同时前面解释了一个问题:怎样判别连接上的端口就是想要连接的服务器的?类比一下类的封装特性,可以把端口看做封装在服务器中的成员,要想连接上服务器端口,首先得获取入口(服务器地址),然后才能通过IP查询到服务器的端口位置,避免出现多个服务器之间共用端口的情况(不同服务器IP地址是独
15、一无二的).,(3)代码部分解释,服务器端+客户端:ServerSocket s=new ServerSocket(PORT)利用ServerSocket类创建端口s对象,用于接收客户端数据以及提供端口Socket socket=s.accept()利用Socket类创建socket对象接收数据InetAddress addr=InetAddress.getByName(null):如果向getByName()传递一个null(空)值,就默认为使用localhost。我们用InetAddress对特定的机器进行索引,而且必须在进行进一步的操作之前得到这个InetAddress(互联网地址)。s
16、ocket.close()+s.close():finally中关闭对象,PrintWriter out=new PrintWriter(new 创建打印输出对象BufferedWriter(new 缓冲区数据流输出OutputStreamWriter(socket.getOutputStream(),true);数据输出流 socket对象获取向外输出数据out.println():直接输出并发送括号中的数据,BufferedReader in=new BufferedReader(new 创建缓冲区数据流读取对象 InputStreamReader(socket.getInputStrea
17、m()输入数据流读取 socket获取输入数据String str=in.readln():整行读入发送来的数据,以上是socket简单框架的代码,写的时候再:import java.io.*;import.*;加上:trycatchfinally即可至多:extends Thread,用run实现多线程个人代码都是在此基础上加上框架和程序功能实现代码而已,待扩展的地方很多。,什么是Socket?,端口:一般而言,一台计算机只有单一的连接到网络的物理连接(Phy Connection),所有的数据都通过此连接对内对外送达特定的计算机,这就是端口。但网络程序设计中的端口并非真实的物理存在,而是被
18、规定为0-65535之间的整数。,网络程序设计中的套接字(Socket)用于将程序和端口连接起来。,套接字分为(服务器程序)ServerSocket和(客户机程序)Socket,其实,Socket肯定用于创建某种Reader以及/或Writer(或者InputStream和/或OutputStream)对象,这是运用Socket的唯一方式。,ServerSocket,服务器套接字ServerSocket主要功能是等待来自网络上的“请求”,一般使用构造方法ServerSocket(int port)来绑定到指定接口等待连接。,ServerSocket server=new ServerSocke
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多线程 Socketliyue stu

链接地址:https://www.31ppt.com/p-6561009.html