java多线程课件
- 格式:ppt
- 大小:221.00 KB
- 文档页数:35


Java多线程详解——⼀篇⽂章搞懂Java多线程
⽬录
1. 基本概念
程序(program)程序是为完成特定任务、⽤某种语⾔编写的⼀组指令的集合。即指⼀段静态的代码(还没有运⾏起来),静态对象。进程(process)进程是程序的⼀次执⾏过程,也就是说程序运⾏起来了,加载到了内存中,并占⽤了cpu的资源。这是⼀个动态的过程:有⾃⾝的产⽣、存在和消亡的过程,这也是进程的⽣命周期。进程是系统资源分配的单位,系统在运⾏时会为每个进程分配不同的内存区域。线程(thread)进程可进⼀步细化为线程,是⼀个程序内部的执⾏路径。若⼀个进程同⼀时间并⾏执⾏多个线程,那么这个进程就是⽀持多线程的。线程是cpu调度和执⾏的单位,每个线程拥有独⽴的运⾏栈和程序计数器(pc),线程切换的开销⼩。⼀个进程中的多个线程共享相同的内存单元/内存地址空间——》他们从同⼀堆中分配对象,可以访问相同的变量和对象。这就使得相乘间通信更简便、搞笑。但索格线程操作共享的系统资源可能就会带来安全隐患(隐患为到底哪个线程操作这个数据,可能⼀个线程正在操作这个数据,有⼀个线程也来操作了这个数据v)。
配合JVM内存结构了解(只做了解即可)
class⽂件会通过类加载器加载到内存空间。其中内存区域中每个线程都会有虚拟机栈和程序计数器。每个进程都会有⼀个⽅法区和堆,多个线程共享同⼀进程下的⽅法区和堆。CPU单核和多核的理解单核的CPU是⼀种假的多线程,因为在⼀个时间单元内,也只能执⾏⼀个线程的任务。同时间段内有多个线程需要CPU去运⾏时,CPU也只能交替去执⾏多个线程中的⼀个线程,但是由于其执⾏速度特别快,因此感觉不出来。多核的CPU才能更好的发挥多线程的效率。对于Java应⽤程序java.exe来讲,⾄少会存在三个线程:main()主线程,gc()垃圾回收线程,异常处理线程。如过发⽣异常时会影响主线程。Java线程的分类:⽤户线程 和 守护线程
Java的gc()垃圾回收线程就是⼀个守护线程守护线程是⽤来服务⽤户线程的,通过在start()⽅法前调⽤thread.setDaemon(true)可以吧⼀个⽤户线程变成⼀个守护线程。并⾏和并发
Java 多线程特性及用法大纲
一. 简介
1. 什么是多线程
多线程是指在一个程序中同时运行多个线程的并发执行方式。每个线程都是程序的独立执行单元,
它们可以在同一时间内执行不同的任务,使得程序可以更高效地利用多核处理器和资源。Java是一
种支持多线程编程的编程语言,通过其多线程特性,可以实现并发执行不同任务,提高程序的性能
和响应能力。
在 Java 中,每个线程都是由 Thread 类或实现了 Runnable 接口的类创建的。线程可以独立地执行
代码,具有自己的程序计数器、栈、寄存器等。Java提供了多线程编程的支持,使得开发者可以轻
松地创建、管理和控制多个线程,以实现并行处理任务,例如同时处理用户输入、后台计算、网络
通信等。
2. 为什么使用多线程
使用多线程是为了充分利用现代计算机的多核处理器和资源,以提高程序的性能、响应性和效率。
以下是一些使用多线程的主要原因:
1. 并行处理: 多线程允许程序同时执行多个任务,从而实现并行处理。这对于需要同时处理多
个任务的应用程序非常重要,如图像和视频处理、数据分析等。
2. 提高性能: 多线程可以在多核处理器上同时执行不同的任务,从而显著提高应用程序的运行
速度和性能。
3. 改善响应性: 在单线程应用中,如果一个任务阻塞了,整个程序都会被阻塞。而多线程允许
程序继续响应其他请求,即使某些任务正在等待资源。
4. 任务分解: 多线程使得大型任务可以分解成更小的子任务,每个子任务都可以在独立的线程
中执行。这样可以更有效地管理和调度任务。
5. 多任务处理: 多线程允许程序同时处理多个任务,比如在一个Web服务器中同时处理多个客
户端请求,提供更好的用户体验。
6. 资源共享: 多线程允许不同的线程共享同一组资源,如内存、文件、数据库连接等。这可以
减少资源的浪费,并提高资源利用率。
7. 实时性: 对于需要实时处理的应用,多线程可以使任务在严格的时间限制内完成,如嵌入式
系统、实时图像处理等。
- 1 - java 多线程理解
Java多线程是指在同一时间内,程序中有多个线程在同时执行。这种并发性质让程序可以更有效地利用CPU资源,提高程序的响应速度和并发处理能力。
Java多线程的实现方式有两种,一种是继承Thread类,另一种是实现Runnable接口。对于简单的多线程任务,继承Thread类更为简单,而对于复杂的任务,实现Runnable接口更为灵活。
Java多线程的核心概念包括线程安全、同步和互斥。线程安全是指多个线程同时调用一个对象或方法时,不会发生错误或数据损坏。同步是指多个线程在执行时,需要互相协调和配合,确保数据的正确性和一致性。互斥是指多个线程在访问共享资源时,需要通过加锁和释放锁来保证同一时间只有一个线程可以访问。
Java多线程的应用领域非常广泛,例如服务器端的并发处理、多媒体处理、网络编程等等。理解Java多线程的核心概念和实现方式,对于开发高并发、高可用的程序非常重要。
JAVA使⽤多线程(线程池)进⾏数据处理
*⼯作顺序:
* 1)、线程池创建,准备好core数量的核⼼线程, 准备接受任务
* 1.1、core满了,就将再进来的任务放⼊阻塞队列中。空闲的core就会⾃⼰去阻塞队列获取任务执⾏
* 1.2、阻塞队列满了,就直接开新线程执⾏,最⼤只能开到max指定的数量
* 1.3、max满了就⽤RejectedExecut ionHandler拒绝任务
* 1.4、max都执⾏完成,有很多空闲.在指定的时间keepAliveTime以后,释放max-core这些线程
new LinkedBlockingDeque<>(): 默认是Integer的最⼤值。内存不够
⼀个线程池core 7; max 20,queue:50,100并 发进来怎么分配的;
7个会⽴即得到执⾏,50个会进⼊队列,再开13个进⾏执⾏。剩下的30个就使⽤拒绝策略。
Executors . newCachedThreadPool() core是0, 所有都可回收
Executors . newF ixedThreadPool()固定⼤⼩,core=max; 都不可回收
Executors. newScheduledThreadPool()定时任务的线程池
Executors. newSingleThreadExecutor()单线程的线程池,后台从队列⾥⾯获取任务,挨个执⾏
import mons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;