A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1277690043 初级黑马   /  2019-5-13 15:54  /  1085 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

进程:  是正在运行的程序
        是系统进行资源分配和调用的独立单位
        每一个进程都有它自己的内存空间和系统资源
线程:是进程中的单个顺序控制流,是一条执行路径
        单线程:一个进程如果只有一条执行路径,则称为单线程程序
        多线程:一个进程如果有多条执行路径,则称为多线程程序
实现多线程方式一:继承Thread类
        void run()在线程开启后,此方法将被调用执行
        void start()使此线程开始执行,Java虚拟机会调用run方法()
实现步骤
        定义一个类MyThread继承Thread类
        在MyThread类中重写run()方法
        创建MyThread类的对象
        启动线程
设置和获取线程名称
        void  setName(String name)将此线程的名称更改为等于参数name
        String  getName()返回此线程的名称
        Thread  currentThread()返回对当前正在执行的线程对象的引用
线程优先级
线程调度
        两种调度方式
          分时调度模型:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片
          抢占式调度模型:优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的 CPU 时间片相对多一些
        Java使用的是抢占式调度模型
        随机性 :
假如计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。所以说多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的
优先级相关方法
        final int getPriority()    返回此线程的优先级
final void setPriority(int newPriority)        更改此线程的优先级 线程默认优先级是5;线程优先级的范围是:1-10
线程控制
        static void sleep(long millis)

使当前正在执行的线程停留(暂停执行)指定的毫秒数

        void join()

等待这个线程死亡

        void setDaemon(boolean on)

将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机将退出

实现多线程方式二:实现Runnable接口
Thread构造方法
        Thread(Runnable target)

分配一个新的Thread对象

        Thread(Runnable target, String name)

分配一个新的Thread对象

多线程的实现方案有两种       
        - 继承Thread类
- 实现Runnable接口

相比继承Thread类,实现Runnable接口的好处
        避免了Java单继承的局限性
        适合多个相同程序的代码去处理同一个资源的情况,把线程和程序的代码、数据有效分离,较好的体现了面向对象的设计思想
安全问题出现的条件
        是多线程环境
        有共享数据
        有多条语句操作共享数据
如何解决多线程安全问题呢?
        基本思想:让程序没有安全问题的环境
怎么实现呢?
        把多条语句操作共享数据的代码给锁起来,让任意时刻只能有一个线程执行即可
        Java提供了同步代码块的方式来解决
线程安全的类
StringBuffer
        线程安全,可变的字符序列
        从版本JDK 5开始,被StringBuilder 替代。 通常应该使用StringBuilder类,因为它支持所有相同的操作,但它更快,因为它不执行同步
Vector
        从Java 2平台v1.2开始,该类改进了List接口,使其成为Java Collections Framework的成员。 与新的集合实现不同, Vector被同步。 如果不需要线程安全的实现,建议使用ArrayList代替Vector
Hashtable
        该类实现了一个哈希表,它将键映射到值。 任何非null对象都可以用作键或者值
        从Java 2平台v1.2开始,该类进行了改进,实现了Map接口,使其成为Java Collections Framework的成员。 与新的集合实现不同, Hashtable被同步。 如果不需要线程安全的实现,建议使用HashMap代替Hashtable


网络编程
        概念:同一个网络中多台设备进行数据交换
网络编程三要素
        ip地址:  ipconfig 获取本机IP地址    网络是否通: ping 192.168.1.24      127.0.0.1  代表本机地址
        端口号:0-65535    0-1023系统保留   1024-65535我们来使用
        通信协议:
                UDP:用户数据包协议  特点:速度快  无连接  不发保证数据完整
                TCP:传输控制协议       特点:有连接(三次握手)保证数据完整性  相对速度慢些
InetAddress:此类表示Internet协议(IP)地址
        static InetAddress getByName(String host)

确定主机名称的IP地址。主机名称可以是机器名称,也可以是IP地址

        String getHostName()

获取此IP地址的主机名

        String getHostAddress()

返回文本显示中的IP地址字符串

端口
        设备上应用程序的唯一标识
端口号
        两个字节表示的整数,它的取值范围是0~65535。其中,0~1023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败
协议
        计算机网络中,连接和通信的规则被称为网络通信协议
UDP协议
        用户数据报协议(User Datagram Protocol)
        UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
        由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输
        例如视频会议通常采用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议
TCP协议
        传输控制协议 (Transmission Control Protocol)
        TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”
        三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠第一次握手,客户端向服务器端发出连接请求,等待服务器确认
第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求
第三次握手,客户端再次向服务器端发送确认信息,确认连接
完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛。例如上传文件、下载文件、浏览网页等
Java中的UDP通信
        UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
        Java提供了DatagramSocket类作为基于UDP协议的Socket
构造方法
        DatagramSocket()创建数据报套接字并将其绑定到本机地址上的任何可用端口
        DatagramPacket(byte[] buf,int len,InetAddress add,int port)建数据包,发送长度为len的数据包到指定主机的指定端口

相关方法
        void send(DatagramPacket p)发送数据报包
        void close()关闭数据报套接字
        void receive(DatagramPacket p)从此套接字接受数据报包
发送数据的步骤
        创建发送端的Socket对象(DatagramSocket)
        创建数据,并把数据打包
        调用DatagramSocket对象的方法发送数据
        关闭发送端
接收数据的步骤
        创建接收端的Socket对象(DatagramSocket)
        创建一个数据包,用于接收数据
        调用DatagramSocket对象的方法接收数据
        解析数据包,并把数据在控制台显示
        关闭接收端
构造方法
        DatagramPacket(byte[] buf, int len)创建一个DatagramPacket用于接收长度为len的数据包
相关方法
        byte[]  getData()返回数据缓冲区
        int  getLength()返回要发送的数据的长度或接收的数据的长度

Java中的TCP通信
        Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信。
        Java为客户端提供了Socket类,为服务器端提供了ServerSocket类
构造方法
        Socket(InetAddress address,int port)创建流套接字并将其连接到指定IP指定端口号
        Socket(String host, int port)创建流套接字并将其连接到指定主机上的指定端口号

相关方法
        InputStream  getInputStream()返回此套接字的输入流
        OutputStream getOutputStream()返回此套接字的输出流
构造方法
ServletSocket(int port)创建绑定到指定端口的服务器套接字
相关方法
        Socket accept()监听要连接到此的套接字并接受它


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马