还剩28页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
尚硅谷多线程本课程将深入讲解多线程的概念、原理和应用涵盖线程基础、线程同步、线程池、并发编程等内容什么是多线程并发执行资源共享多个线程在同一时间段内同时运多个线程可以共享同一个进程的行,提高程序效率资源,包括内存、文件等响应速度提升提高程序的灵活性多线程可以同时处理多个任务,多线程可以让程序更加灵活,可提高程序响应速度以根据需要动态地创建和销毁线程多线程的优势提高程序效率增强用户体验
11.
22.多线程可以充分利用多核CPU例如,在网页浏览器中,多线的资源,并行执行任务,提高程可以同时处理多个任务,例程序运行效率如加载页面、执行脚本和播放视频,从而提高用户体验简化编程模型提升响应速度
33.
44.多线程可以将一个复杂的任务例如,在服务器端应用中,多分解成多个更小的任务,然后线程可以同时处理多个用户的由多个线程并行执行,简化编请求,提高服务器的响应速度程模型多线程的编程模型内核级线程用户级线程内核级线程由操作系统直接管理每个内核级线程对应一个独立用户级线程由应用程序管理,它们运行在同一个进程中,共享地的进程,拥有自己的地址空间和资源址空间和资源内核感知不到用户级线程的存在线程的创建和启动创建线程是并发编程的基础Java提供两种主要方式来创建线程实现Runnable接口和继承Thread类创建线程对象1使用Thread类或Runnable接口创建线程对象启动线程2调用线程对象的start方法启动线程运行线程3线程开始执行run方法中的代码线程的生命周期新建New1线程被创建后,还未启动,尚未开始执行就绪Runnable2线程已准备好运行,等待分配CPU时间运行Running3线程正在执行任务,占用CPU时间阻塞Blocked4线程被阻塞,无法继续运行,例如等待I/O操作完成死亡Dead5线程已完成执行或出现异常而终止线程的调度线程调度概述轮询调度优先级调度线程调度是指操作系统分配处理器时间给各轮询调度是将时间片平均分配给所有等待运优先级调度会根据线程的优先级来决定哪个个线程的过程每个线程都需要一定时间运行的线程每个线程运行一个时间片后,调线程先运行优先级高的线程会优先获得处行,调度器会根据策略决定哪个线程应该先度器会切换到另一个线程理器的资源运行线程的同步当多个线程需要访问共享资源时,同步机制可以确保资源不会被多个线程同时访问同步机制使用锁来控制对共享资源的访问,防止数据竞争和不一致线程同步可以确保线程按照特定的顺序执行,例如,一个线程必须等待另一个线程完成任务后再执行关键字synchronized同步代码块同步方法12synchronized关键字用于同步同步方法用于同步整个方法,代码块,保证同一时刻只有一保证同一时刻只有一个线程可个线程可以执行代码块内的代以访问该方法码对象锁使用场景34synchronized关键字的锁对象synchronized关键字可用于解可以是任意对象,通过锁对象决多线程访问共享资源导致的来控制线程的同步访问线程安全问题死锁的概念和产生条件互斥条件占有并等待条件不可剥夺条件循环等待条件多个线程竞争共享资源,每个线程已经获得了一些资源,但线程已经获取的资源不能被其线程之间形成一个循环等待链线程都需要独占访问该资源才需要更多资源才能完成任务,他线程强行抢占,只能由线程,每个线程都等待链中下一个能继续执行却无法释放已经持有的资源,自身释放线程释放的资源并等待获取新的资源死锁的预防和解决预防死锁解除死锁避免死锁避免资源竞争,按照顺序获取资源,避杀死一个或多个线程,抢占资源,回滚合理设计代码,避免竞争条件,使用锁免循环依赖,使用超时机制,防止线程操作,重新启动系统,可以尝试使用死机制,避免死锁的发生无限制等待锁检测工具关键字volatile可见性保证禁止指令重排序volatile确保对共享变量的修改对其他volatile禁止编译器对volatile变量的线程立即可见,无需使用同步机制读写操作进行重排序,保证操作顺序线程安全的概念线程安全线程安全指的是在多线程环境下,多个线程访问共享资源时,不会产生数据错误或不一致的结果简单来说,如果一个方法或代码块是线程安全的,就意味着即使多个线程同时调用它,也不会导致数据错误或数据丢失线程安全的实现同步机制1使用synchronized关键字或锁机制来保护共享资源线程局部变量2每个线程拥有独立的变量副本,避免线程间冲突无状态对象3对象不存储任何状态,避免线程安全问题不可变对象4对象的状态在创建后无法改变,保证线程安全线程安全是指多个线程访问共享资源时,不会出现数据不一致或错误的情况实现线程安全需要采取措施,确保多线程环境下的数据完整性和一致性线程安全的常用手段synchronized关键字Lock接口原子操作类保证同一时间只有一个线程可以访问被提供更灵活的锁机制,支持非阻塞式加锁,使用原子操作类,例如AtomicInteger和synchronized修饰的代码块,从而实现同以及条件变量等高级功能AtomicLong,可以保证对共享变量的读写步访问操作的原子性可见性和指令重排序可见性可见性是指线程之间的可见性问题,即一个线程对共享变量的修改能否被其他线程立即看到指令重排序指令重排序是指编译器和处理器为了优化性能,可能会对代码的执行顺序进行调整内存模型Java内存模型JMM定义了线程之间共享变量的访问规则,以及可见性和指令重排序的约束线程池的概念线程池的优势线程池的组成线程池减少了线程创建和销毁的开销,提高了程序效率线程池通常包括线程池管理器、工作线程、任务队列等线程池可以有效控制并发线程的数量,防止系统资源被耗尽线程池管理器负责管理线程池,工作线程负责执行任务,任务队列用来保存待执行的任务线程池的工作原理任务提交当提交任务到线程池时,线程池会根据当前状态进行处理线程获取如果线程池中有空闲线程,则直接分配给新任务;否则,新任务将被添加到任务队列中等待线程执行获取到任务的线程开始执行任务,并等待任务完成线程回收任务完成后,线程不会立即销毁,而是返回到线程池中等待新的任务和Callable Future1Callable接口2Future接口3协同工作Callable接口表示可调用任务,用于Future接口代表异步计算的结果,Callable创建任务,Future保存结果返回结果提供获取结果、取消任务等方法,实现异步编程线程的异常处理异常捕获异常处理策略使用try-catch块捕获线程中发生根据异常类型选择合适的处理方的异常,防止程序崩溃式,例如记录日志、重新尝试操作或抛出异常异常传播未捕获的异常会向上层线程传播,最终可能导致程序终止线程的停止中断线程使用interrupt方法,线程内部需要检测中断标志位设置标志位在共享资源中设置标志位,线程通过检测标志位判断是否停止使用Thread.stop该方法已过时,因为它可能会导致线程安全问题,不建议使用线程的优先级优先级设定调度机制
11.
22.线程的优先级可以通过Thread操作系统会根据线程的优先级类的setPriority方法设置,范进行调度,优先级高的线程获围从1到10,数值越大优先级得更多CPU时间越高调度策略注意事项
33.
44.Java线程的调度策略是抢占式优先级高的线程并不能完全保调度,但优先级只是影响调度证先执行,因为其他因素也会因素之一,并非绝对的影响调度线程的上下文切换上下文切换的本质上下文切换的开销减少上下文切换线程切换时,CPU需要保存当前线程的状上下文切换涉及内存操作,会消耗CPU时合理设计线程数量,避免频繁切换,提高程态,并将目标线程的状态加载到CPU中间,影响程序性能序执行效率并发编程常见问题线程安全死锁线程安全是一个重要的概念,必死锁是指多个线程因争夺资源而须确保共享资源在并发访问时保相互等待,导致程序无法继续执持一致性行竞争条件性能问题竞争条件是指多个线程同时访问并发编程可能会带来性能问题,共享资源,导致程序结果不可预例如线程切换的开销和竞争资源测的消耗线程的状态转换新建New1线程被创建但尚未启动它处于等待状态,等待操作系统分配资源并开始执行运行Runnable2线程已启动并准备运行它正在等待CPU时间片分配,以便开始执行代码运行Running3线程正在执行代码它正在占用CPU时间片,并执行其任务阻塞Blocked4线程被阻塞,无法运行这可能是因为线程在等待某个资源(例如锁)或正在等待I/O操作完成终止Terminated5线程已完成执行或被强制停止它不再处于活动状态,并被从系统中删除使用实现同步器AQSAQS简介同步器实现AbstractQueuedSynchronizer AQS是一个抽象的同步器框架基于AQS可以实现各种同步器,例如它提供了一个通用的同步器实现,可以用来构建各种同步机制•ReentrantLock•SemaphoreAQS定义了state状态变量,以及acquire和release方法来操作•CountDownLatchstate变量•FutureTask使用原子类Atomic原子操作原子操作是指一系列操作,要么全部执行成功,要么全部失败它们确保在多线程环境中,数据的一致性和完整性线程安全原子类通过内部锁机制,保证了对共享数据的原子操作,从而避免了竞态条件,确保线程安全CAS原子类使用CAS(Compare-And-Swap)机制,比较并交换操作,实现原子操作中的锁Java同步锁可重入锁同步锁是Java中最基本的锁机制,它确保同一时间只有一个线程可重入锁允许同一个线程多次获取同一个锁,而不会造成死锁可以访问共享资源这种机制通过synchronized关键字实现,可ReentrantLock是Java中可重入锁的典型实现,提供了更灵活的以应用于方法或代码块控制机制综合案例分析将理论知识应用到实际的项目中,了解多线程编程的实际应用场景和挑战通过案例分析,加深对多线程编程的理解,提升解决实际问题的能力小结与展望多线程优势12多线程是Java并发编程的基础提高程序效率,实现异步操作挑战未来34线程同步,数据一致性,死锁并行计算,分布式系统。
个人认证
优秀文档
获得点赞 0