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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王晓艺 初级黑马   /  2019-5-13 14:45  /  1026 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王晓艺 于 2019-5-13 14:55 编辑

多线程
  • 进程和线程是什么?

    • 进程:
      • 正在运行的程序
        • 是系统进行资源分配和调用的独立单位
        • 每一个进程都有它自己的内存空间和系统资源


    • 线程:
      • 是进程中的单个顺序控制流,是一条执行路径
        • 单线程:一个进程如果只有一条执行路径,则称为单线程程序
        • 多线程:一个进程如果有多条执行路径,则称为多线程程序


    • 多线程的实现方法:
      • 继承Thread类
        • 定义一个类MyThread继承Thread
        • 在MyThread类中重写run()方法
        • 创建MyThread类的对象
        • 启动线程


    • 设置和获取线程名称:
      • Thread 类中获取和设置线程名称的方法
        • void setName(String name); 将此线程的名称更改为等于参数 name
        • String getName(); 返回此线程的名称
        • 通过构造方法也可以设置线程名称

      • 线程优先级
        • 线程调度(两种):
          • 分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片
          • 抢占式调度模型:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的CPU时间片相对多一点

        • Java使用的是抢占式调度模型
        • 随机性
          ​        假如计算机只有一个CPU,那么CPU在某一个时刻只能执行一条指令,线程只有等到CPU时间片,也就是使用权,才可以执行指令。所以说多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的
        • 设置和获取线程优先级的方法
          • 设置优先级:setPriority(1-10)
          • 获取优先级:getPriority()
          • 优先级范围:
            • 1-10
            • Thread.MIN_PRIORITY 1
            • Thread.MAX_PRIORITY



      • 线程控制:
        • 休眠:sleep(1000)
        • 等待线程死亡:join()
        • 守护线程:
          ​        setDaemon(true)
          ​        垃圾回收线程


    • 实现多线程
    • 实现Runnable接口的方式实现多线程
      • 实现Runnable接口:
        • 定义一个类MyRunnable实现Runnable接口
        • 在MyRunnable类中重写run()方法
        • 创建MyRunnable类的对象
        • 创建Thread类的对象,把MyRunnable对象作为构造方法的参数
        • 启动线程

      • 多线程的实现方案有两种
        • 继承Thread类
          • 重写run
          • 启动Start()

        • 实现Runnable接口
          • 重写run
          • Thread t = new Thread(my,"飞机");
          • t.start();



    • 线程同步

      • 案例的隐患:
        • 相同的票出现了多次
        • 出现了负数的票

      • 原因:
        线程执行的随机性导致的
      • 解决数据安全问题:

        • 为什么出现问题?
          • 是否是多线程环境
          • 是否有共享数据
          • 是否有多条语句操作共享数据

        • 如何解决多线程安全问题呢?
          • 基本思想:让程序没有安全问题的环境

        • 怎么实现呢?
          • 把多条语句操作共享数据的代码给锁起来,让任意时刻只能有一个线程执行即可
          • Java提供了同步代码块的方式来解决

        • 同步代码块格式:
          synchronized(任意对象) {         多条语句操作共享数据的代码 }
          synchronized(任意对象):就相当于给代码加锁了,任意对象就可以看成是一把锁
        • 好处和弊端
          • 好处:解决了多线程的数据安全问题
          • 弊端:当线程很多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率

        • 同步方法解决数据安全问题:
          • 同步方法:就是把sychronzized关键字加到方法上
          • 格式:
            修饰符 sychronzized 返回值类型 方法名(方法参数){
            ​        方法体;
            }
          • 同步方法的锁对象是什么呢?
            ​                this
          • this 锁的是非静态方法

        • 静态同步方法
          • 同步静态方法:就是把sychronzized关键字加到静态方法上
          • 格式:
            修饰符 static sychronzized 返回值类型  方法名(方法参数){
            ​        方法体;}
          • 同步静态方法的锁对象是什么呢?
            ​        类名.class
          • 类名.class 锁的是静态方法

        • 线程安全的类
          • StringBuffer
            • 线程安全,可变的字符序列
            • 被StringBuilder替代 。

          • Vector
            • 被Arraylist替代。

          • Hashtable
            • 该类实现了一个哈希表,它将键映射到值,任何非null对象都可以用作键或者值
            • 被HashMap替代。

          • Collections.synchronizedList()
          • Collections.synchronizedSet()
          • Collections.synchronizedMap()


          • Lock锁

            • 实现提供比使用sychronzized方法和语句可以获得更广泛的锁定操作
            • Lock中提供了获得锁和释放锁的方法
              • lock():获得锁
              • unlock():释放锁

            • Lock是接口不能直接实例化,这里采用他的实现类ReentrantLock来实例化
            • ReentrantLock的构造方法
              ​        ReentrantLock():创建一个ReentrantLock的实例
            • 创建Lock对象
              • Lock l = new ReentrantLock();
              • l.lock();
              • l.unlock();

            • 用try...finally  来 锁定 和 释放锁。

网络编程
  • 什么是网络编程?
    • 计算机网络:
      ​        是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机心痛
    • 网络编程:
      ​        在网络通信协议下,实现网络互联的不同计算机上运行的程序间可以进行数据交换
    • 概念:同一个网络中多台设备进行数据交换
    • 三要素:
      • IP地址:
        ​        想要让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号,也就是设备的标识。
      • 端口号:
        ​        网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程序,那么在网络时,如何区分这些应用程序呢?如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的应用程序了。也就是应用程序的标识。
      • 通信协议:
        ​        通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则。这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。常见的协议有UDP协议和TCP协议。
      • Ip地址:
        • 是网络中设备的唯一标识
        • 分为两大类:
          • IPv4
          • IPv6
            file://C:\Users\Administrator\Desktop\%E5%B0%B1%E4%B8%9A%E7%8F%AD%E7%AC%94%E8%AE%B0\%E6%88%AA%E5%9B%BE\Snipaste_2019-05-12_09-33-00.png?lastModify=1557730468
          • 常用命令:
            • ipconfig:查看本机IP地址
            • ping IP地址:检查网络是否连通

          • 特殊的IP地址:
            ​        127.0.0.1:是回送地址,可以代表本机地址,一般用来测试使用
          • InetAddress的使用

            • 为了方便我们对IP地址的获取和操作,java提供了一个类InteAddress供我们使用
            • InteAddress:此类表示Internet协议(IP)地址
            • 代码:
              [Java] 纯文本查看 复制代码
              package com.itheima;
              import java.net.InetAddress;
              import java.net.UnknownHostException;
              
              public class test01 {
                  public static void main(String[] args) throws UnknownHostException {
                      InetAddress address = InetAddress.getByName("XiaoYi");
              
                      String name = address.getHostName();
              
                      String ip = address.getHostAddress();
              
                      System.out.println("主机名:"+name);
                      System.out.println("IP地址:"+ip);
                  }
              }
            • 协议:

              • 计算机网络中,连接和通信的规则被称为网络通信协议
                UDP协议:

                • 用户数据包协议
                • 特点:速度快 无连接
                • 缺点:无法保证数据完整TCP协议:
                  ​        三次握手:

                  • 传输控制协议
                  • 特点:有连接(三次握手)  保证数据完整性
                  • 缺点:相对速度慢些

              • 端口的作用;

                • 设备上应用程序的唯一标识






0 个回复

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