还剩30页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《尚硅谷多线程》课件什么是多线程?程序进程线程一个程序可以看作是一个独立的执行单一个进程可以看作是一个运行的程序,一个线程可以看作是一个进程中的执行元,它包含了执行指令和数据它拥有独立的地址空间,资源和其他信流,它共享进程的地址空间和资源,但息拥有自己的执行栈和局部变量多线程的作用和意义提高效率提升响应速度充分利用CPU资源,提高程序执行效避免主线程阻塞,提升用户体验率支持并发操作同时处理多个请求,提高系统吞吐量创建线程的三种方式继承类实现接口使用和Thread RunnableCallable FutureTask创建一个继承Thread类的子类,并重创建一个实现Runnable接口的类,并创建一个实现Callable接口的类,该类写run方法,该方法包含线程要执行的实现run方法,该方法包含线程要执行包含线程要执行的任务,并返回结果代码的代码继承类Thread创建线程类创建一个继承自Thread类的子类重写run方法在子类中重写run方法,实现线程要执行的任务创建线程对象创建子类的对象,即线程对象启动线程调用线程对象的start方法启动线程实现接口Runnable定义接口1创建实现Runnable接口的类重写方法run2编写线程执行的逻辑代码创建线程对象3使用Runnable类创建Thread对象启动线程4调用Thread对象的start方法使用和Callable FutureTaskCallable1返回值FutureTask2获取结果线程池3管理线程类常用方法Threadstart runsleeplong millisjoin启动线程,调用run方法线程执行体,包含线程要执行让当前线程休眠指定时间等待其他线程执行完毕的代码线程同步概述竞态条件同步机制同步方法123多个线程访问共享资源时,由于执为了解决竞态条件,需要引入同步可以使用同步方法或同步代码块来行顺序的不确定性,可能会导致数机制,确保多个线程访问共享资源实现线程同步据不一致性时,只有一个线程可以访问关键字synchronized线程同步互斥锁12synchronized关键字是Java synchronized本质上是通过中用于实现线程同步的主要机互斥锁来实现的,当一个线程制它可以确保在同一时间只获得了某个对象的锁,其他线有一个线程可以访问共享资源程就无法访问该对象中的被synchronized修饰的代码块或方法原子操作3synchronized保证了代码块或方法的原子性,确保多个线程对共享资源的操作不会出现中间状态同步块代码块同步互斥锁使用synchronized关键字修饰代码块,保证代码块在同一时刻只synchronized关键字底层使用的是互斥锁,每个对象都对应一个能被一个线程访问互斥锁同步方法概念作用在方法声明前添加**synchronized**关键字,表示该方法为同同步方法能够保证同一时间只有一个线程可以访问该方法,从而步方法当一个线程执行同步方法时,其他线程无法访问该方法避免多个线程对共享资源的竞争访问线程安全的单例模式同步机制懒汉式双重检查使用synchronized关键字保证线程安全在需要时才创建实例,避免资源浪费提高性能,避免不必要的同步线程池概述资源管理提高效率线程池可以有效地管理线程资源通过复用线程,可以减少线程创,避免频繁创建和销毁线程带来建和销毁的时间,提高程序的运的性能损耗行效率控制并发线程池可以限制线程数量,防止过多的线程占用系统资源,导致性能下降线程池的好处资源重用提高响应速度线程池可以重复利用已创建的线线程池预先创建一定数量的线程程,避免反复创建和销毁线程带,可以立即响应新的任务请求,来的性能损耗而不需要等待线程创建控制线程数量线程池可以限制线程数量,防止创建过多的线程导致系统资源耗尽线程池的创建与使用创建线程池管理线程使用Executors类提供的方法创建不同的线程池类型,例如固定线程数通过线程池的shutdown方法或shutdownNow方法优雅地关闭线程池的线程池、缓存线程池、单线程池等123提交任务使用线程池的execute方法或submit方法提交任务到线程池执行和Callable Future接口接口Callable FutureCallable接口是用于创建可返回结果的线程任务,它提供一个Future接口表示异步计算的结果它提供方法来检查计算是否完call方法来执行任务并返回结果成、获取结果、以及取消计算异步任务结果的获取使用Future1Future对象提供了获取异步任务结果的方法,例如get方法处理异常2可以通过get方法抛出异常来处理异步任务执行过程中的错误超时控制3get方法提供了超时机制,可以设置获取结果的最大等待时间线程死锁产生的条件互斥条件请求和保持条件不可剥夺条件循环等待条件多个线程竞争同一资源,且该一个线程已经获得了某些资源线程已经获得的资源,在未使多个线程形成一个循环等待的资源每次只能被一个线程使用,但又请求获取其他资源,而用完之前,不能被其他线程强资源链,每个线程都等待链中这些资源正被其他线程占用行抢夺下一个线程占用的资源预防和规避线程死锁避免循环等待使用公平锁12合理的资源请求顺序,打破循确保线程获取锁的顺序是公平环依赖关系的,避免优先级高的线程一直获取锁设置超时时间减少锁的持有时间34如果线程在一定时间内无法获在获取锁之后尽快释放锁,避取锁,就释放已持有的锁,避免长时间占用资源免长时间阻塞线程活锁和饥饿活锁饥饿线程之间互相等待,无法完成任务线程一直无法获取到资源,处于等待状态线程状态及转换新建可运行运行1New2Runnable3Running线程对象刚被创建,尚未启动线程已启动,正在等待被调度执行线程获得CPU时间片,正在执行任务阻塞终止4Blocked5Terminated线程正在等待某个条件,无法继续执行线程执行完毕或遇到异常退出守护线程后台线程生命周期守护线程是一种特殊的线程,它的作用是为其他线程提供服务守护线程的生命周期与非守护线程不同,它不会阻止JVM退出当所有非守护线程都终止时,守护线程也会自动终止线程的优先级优先级分配线程优先级表示线程被执行的可操作系统根据优先级分配CPU能性,数字越大优先级越高时间片,高优先级线程获得更多时间控制可以通过Thread.setPriorityint priority方法设置线程优先级,范围为1到10线程中断中断信号状态检查通过interrupt方法发送中断信号,线程需主动调用isInterrupted检查但不会立即停止线程中断状态并做出响应处理中断根据业务逻辑,可以选择继续执行、退出或抛出异常ThreadLocal线程局部变量实现原理应用场景每个线程都有自己独立的变量副本,互不ThreadLocalMap存储每个线程的变量副适用于需要在不同线程中保持独立状态的影响本,通过ThreadLocal对象作为key变量,例如数据库连接池并发包中的工具类Semaphore(信号量)控制访问Exchanger(交换器)用于两个线资源的线程数量程交换数据CountDownLatch(倒计时器)等BlockingQueue(阻塞队列)线程待一组线程完成某个任务安全的队列,用于线程间通信原子类Atomic线程安全高效性能Atomic原子类提供了线程安全相比于传统的同步机制,原子类的原子操作,确保了在多线程环通过底层的硬件指令来实现原子境中数据的完整性操作,提高了并发性能常用原子类包括AtomicInteger、AtomicLong、AtomicBoolean等,用于原子操作整数、长整型和布尔值ConcurrentHashMap线程安全高并发性能ConcurrentHashMap允许多ConcurrentHashMap使用分个线程安全地访问和修改数据段锁机制,将数据划分为多个,避免了传统HashMap的线段,每个段拥有独立的锁,提程安全问题升了并发性能灵活的容量控制ConcurrentHashMap可以根据需要调整容量,以适应不断变化的数据量和并发访问需求并发队列线程安全队列多种实现常用操作并发队列是线程安全的队列数据结构,允并发队列有多种实现方式,例如并发队列提供了常用的操作,例如添加许多个线程同时访问和操作队列,而无需BlockingQueue、LinkedBlockingQueue元素、移除元素、获取元素等,并提供了担心数据一致性和并发问题、ArrayBlockingQueue等,它们提供不线程安全的同步机制以确保操作的原子性同的功能和特性以满足各种并发场景的需和一致性要课程总结多线程概述线程同步线程池并发工具学习了多线程的概念、作用深入研究了线程同步机制,了解了线程池的原理、好处学习了Java并发包中的重要和意义,以及创建线程的三包括synchronized关键字、和使用方式,并学习了类,例如Atomic原子类、种方式同步块和同步方法Callable和Future ConcurrentHashMap和并发队列问题答疑欢迎大家提出关于Java多线程相关的问题!让我们共同探讨并解决多线程编程中的困惑欢迎大家积极参与,一起提升Java多线程开发技能。
个人认证
优秀文档
获得点赞 0