网站开发技术支持与保障,wordpress标题空格,扁平化网站布局,oppo开发者选项在哪里打开前面有一篇文章写的是多线程的基本知识#xff0c;以及线程实现的两种方式#xff0c;一种是继承Thread类#xff0c;另一种实现Runnable 接口#xff0c;今天沿着前面的多线程#xff0c;继续分享多线程的第三种创建方法#xff0c;以及第三种创建方法的优势#xff0c… 前面有一篇文章写的是多线程的基本知识以及线程实现的两种方式一种是继承Thread类另一种实现Runnable 接口今天沿着前面的多线程继续分享多线程的第三种创建方法以及第三种创建方法的优势前两种方法的弊端。并且介绍一种新的线程同步机制lock锁的机制。1. 实现线程的第三种方式:实现 Callable 接口重写 call 方法.图1. 实现Callable接口实现多线程图2. 调用以及启动多线程2. 继承Thread类实现Runnable 接口实现多线程的弊端(1) 没有返回值(2) 不支持泛型(3) 异常必须处理3. Callable 强大在哪里呢(1) Future 接 口 位 于 java.util.concurrent 包 中 ,可 以 对 具 体Runnable、Callable 任务的执行结果进行取消(cancel 方法尝试取消执行此任务)、查询是否完成(isDone 方法)、获取结果(get 方法,等待完成然后检索其结果)等。(2) FutrueTask 是 Futrue 接口的唯一的实现类.(3) FutureTask 同时实现了 Runnable, Future 接口。它既可以作为 Runnable 被线程执行又可以作为 Future 得到Callable 的返回值.图3. Future接口4. 线程同步的第三种方法Lock锁。Lock 锁:对需要上锁的地方上锁1) JDK1.5 后新增的功能2) 与 Synchronized 相比Lock 可提供多种锁方案更灵活3) Java.util.concurrent.locks 中的 Lock 是一个接口它的实现类是一个 Java 类而不是作为语言的特性关键字来实现。注意如果同步代码有异常要将 unLock()放到 finally 中。4. 1 创建Lock锁的步骤。(1) 创建 Lock 对象(2) 调用 lock()方法上锁(3) 调用 unlock()方法解锁4.2 Lock 与 synchronized 的区别。(1) Lock 是 显 示 锁 (手 动 开 启 和 关 闭 锁 ,别 忘 关 闭锁),synchronized 是隐式锁(2) Lock 只有代码块锁synchronized 有代码块锁和方法锁。(3) 使用 Lock 锁JVM 将花费较少的时间来调度线程性能更好并且具有更好的扩展性提供更多的子类。(4) Lock 确保当一个线程位于代码的临界区时另一个线程不进入临界区。如果其他线程试图进入锁定的代码则它将一直等待(即被阻止)直到该对象被释放。lock()方法会对 Lock 实例对象进行加锁因此所有对该对象调用 lock()方法的线程都会被阻塞直到该 Lock 对象的 unlock()方法被调用。5. 线程池。5.1 什么是线程池创建和销毁对象是非常耗费时间的创建对象需要分配内存等资源销毁对象 虽然不需要程序员操心但是垃圾回收器会在后台一直跟踪并销毁对于经常创建和销毁、使用量特别大的资源比如并发情况下的线程对性能影响很大。思路 创建好多个线程放入线程池中使用时直接获取引用不使用时放回池中。可以避免频繁创建销毁、实现重复利用。5.2 线程池的好处.1) 提高响应速度减少了创建新线程的时间(2) 降低资源消耗重复利用线程池中线程不需要每次都创建(3) 提高线程的可管理性避免线程无限制创建、从而销毁系统资源降低系统稳定性甚至内存溢出或者 CPU 耗尽5.3 线程池的应用场合(1) 需要大量线程并且完成任务的时间短。(2) 对性能要求苛刻。(3) 接受突发性的大量请求。6. 任务调度 度 Task_Timer和 ThreadLocal。6.1 什么是调度?任务就是事情调度在不同的时间点或者在指定的时间点或者间隔多长时间我去运行这个任务。类似于生活中的闹钟。6.2 ThreadLocal.ThreadLocal 直译为“本地线程”其实它就是一容器用于存放线程的局部变量作用为解决多线程程序的并发问题。图4. ThreadLocal 的 的 API谢谢大家共同努力共同进步。