Java-多线程

Java-多线程 1.多线程的基本概念1.1 简单介绍进程进程是程序的的基本执行实体线程线程是操作系统能够进行运算调度的最小单位被包含在进程之中是进程中的实际运作单位。可以简单理解为是应用软件中相互独立可以同时运行的功能。多线程的应用场景软件中的耗时操作所有的聊天软件所有的后台服务器多线程的作用提高效率1.2多线程的两个概念并发在同一时刻有多个指令在单个CPU上交替执行并行在同一时刻有多个指令在CPU上同时执行1.3多线程的实现方式1继承Thread类的方式进行实现1自己定义一个类继承线程类Thread2重写run方法3创建子类对象并启动线程2实现Runnable接口的方式进行实现1自己定义一个类实现Runnable接口2重写run方法3创建自己类的对象· 4创建一个Thread类的对象并开启线程3利用Callab接口喝Future接口方式实现特点可以获取到多线程运行的结果1创建一个类实现Callable接口2重写call有返回值表示多线程运行的结果3创建自己类的对象表示多线程要执行的任务4创建Future的对象作用管理多线程的运行结果5创建Thread类的对象并启动1.4常见成员方法-setName细节如果没有给线程设置名字线程也有默认的名字。格式为Thread-XX为序号从0开始。如果要给线程设置名字可以用setName方法进行设置也可以用构造方法设置但是构造方法需要重写构造方法。-currentThread细节获取当前线程的对象。当JVM虚拟机启动之后会自动的启动多条线程其中有一条线程就叫做main线程。-sleep细节哪条线程执行到这个方法对应线程就会在这里停留对应的事件当事件到了会继续执行后面的代码-优先级Priority的拓展线程的调度抢占式调度随机的、非抢占式调度按顺序执行优先级最小为1最大为10优先级越大抢到CPU的概率就越大。线程默认的优先级为5。优先级不是绝对的只是概率问题。-setDaemon守护线程当其他的非守护线程执行完毕之后守护线程会陆续结束1.5线程的生命周期1.6线程安全问题1同步代码块把操作共享数据的代码锁起来。格式synchronized (锁){操作共享数据的代码;}特点1锁默认打开有一个线程进去了锁自动关闭2里面的代码全部执行完毕线程出来锁自动打开2同步方法就是把synchronize关键字加到方法上格式修饰符 synchronized 返回值类型 方法名(方法参数){}特点1同步方法是锁住方法里面所有的代码2锁对象不能自己确定--非静态this 静态当前类的字节码文件对象3Lock锁死锁--不要让两个锁嵌套起来1.7生产者喝消费者等待唤醒机制书写多线程代码的套路1写循环 2同步代码块 3判断共享数据是否到了末尾到了末尾 4判断共享数据是否到了末尾没到末尾执行核心逻辑常见方法阻塞队列的继承结构ArrayBlockingQueue底层是数组有界。LinkedBlockingQueue底层是链表无界但不是真正的无界最大为int的最大值。1.8线程池1线程池的核心原理1创建一个池子池子是空的2提交任务时池子会创建新的线程对象任务执行完毕线程归还给池子下回再提交任务时不需要创建新的线程直接复用已有的线程即可3但是如果提交任务时池子中没有空闲的线程也无法创建新的线程任务就会排队等待2代码实现步骤1创建线程池 2提交任务 3所有的任务执行完毕关闭线程池Executors线程池的工具类通过调用方法返回不同类型的线程池对象3自定义线程池自定义线程池任务拒绝策略自定义线程池的核心元素线程池多大合适