Java 并发编程与多线程概念

Java多线程并发编程系列-01 线程基本概念、创建、使用 本文介绍了并发编程中线程的基本概念与使用方式。首先阐述了进程与线程的区别,指出线程是CPU调度的基本单位,而进程是资源分配的单位。接着分析了多线程的优势(提高CPU利用率)和局限性(线程安全问题、切换开销)。文章对比了串行、并行和并发的概念,并详细讨论了同步/异步、阻塞/非阻塞四种组合模式。在实践部分,介绍了三种创建线程的方法:继承Thread类、实现Runnable接口、实现Callable接口配合FutureTask,以及线程池方式。最后解析了Java线程的6种状态(NEW、RUNNABLE、BLOCK 阅读详情

Java 并发 并发编程  多线程  编程 

        今天放一张自己以前用Maya建模加材质加渲染的CG图片,花了三周左右。

微信公众号

 

王皓的GitHub:https://github.com/TenaciousDWang

 

            重新复习一遍多线程,记个笔记,最近比较忙,存货不多了,不一定几天更了...

        

           首先,并发是什么,要了解什么是并发我们先看没有并发和有并发时,CPU在执行多任务时情况。

 

            无并发有十个任务同时需要执行,一个任务执行完,再执行下一个任务。此时第一个任务需要大量时间,其他任务就需要排队等好久后才能继续执行。

 

            有并发同样十个任务,CPU把执行时间分成若干份,每个任务执行一段时间停下并记录一下执行情况,然后切换到下一个任务执行一段时间停下记录一下执行情况,以此类推,走一圈后,回来读取第一个任务的执行情况继续按照上述套路执行。

 

            十秒内,假设第一个任务需要执行十秒其他任务需要一秒,那么第一种情况十秒后只能执行完一个任务。第二种情况则可以执行完九个任务,因为执行第一个任务执行一秒后CPU切换到了下一个任务,后面所有任务都是一秒执行完毕,所以十秒后九个任务已经完成,CPU重新切回到第一个耗时任务继续执行。这个就叫做并发。

 

            引用《Easy Coding》里的话描述一下并发:某个时间段内,多任务交替处理能力。

 

            需要注意并发与并行并不是一个概念,并行又是什么?现在我们的CPU都是多核心,多个逻辑处理器,比如我现在主力机,ITX小型核弹使用一枚AMD 锐龙 2700(AMD真香)CPU,8核心,16个逻辑处理器(就是我们说的8核16线程,后面会提到线程的概念跟这个平常说的不一样,16线程实际上叫16个逻辑处理器),这时假设还是10个任务,那么根本不需要并发(我们可以把刚才并发举的例子当做单核单逻辑处理器),一个逻辑处理器处理一下个任务,十个任务同时执行,这个就叫做并行。

 

            通俗一点讲,并发指的是KTV里只有一个麦,十个人轮流使用这个麦来唱歌,注意是轮流,而并行指的是16个麦,十个人可以同时用来唱歌。

           在举个例子,医院里,两个医生同时看病叫并行,一个医生一会望,一会闻,一会问,一会切,这个叫做并发。

 

            归根到底,都是为了提高处理任务的效率。这里的任务在计算机中我们叫做进程,比如QQ是一个进程,微信是一个进程,Excel是一个进程,网易云音乐是一个进程,你可以边听音乐边打字聊天,就要归功于并发与并行了。

 

            通过上面的描述我们了解了并发,并行,进程三个概念。

​

            接下来说一下还有一个主要的概念就是线程,我们现在理解了一个系统内有多个进程并发,并行,那么线程的概念也就很好理解了,进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能。

 

            一个进程里也分又很多子任务,如果按照顺序一个一个执行则会出现上面系统无进程时的问题,这里就出现了线程的概念,一个进程包含多个线程,注意这里线程是系统调度的基本单位,不会再继续分解,且线程本身拥有的内存资源与其他线程一起,都是共享自该线程所在进程的内存资源。

 

            是不是线程越多,系统运行的越快呢?我们来举一个通俗的例子,搬砖,现在一些砖需要从一楼搬到十楼,一个搬运工就是一个线程。如果一个搬运工一次搬一块砖到十楼再下来继续往复直到所有砖搬完,任务完成,这就是单个线程来运行效率低下。

 

            现在我们加线程,十个搬运工来搬砖,也就是十个线程并发一次可以带十块砖上去,虽然在楼道中存在搬运工交会产生耗时,但是总体任务执行时间降低了,提高了任务执行效率。这里的交会其实可以指,线程在切换任务时,每次都要记录执行到哪里了,切到下个线程时,需要去找这个线程上次执行到哪里了,然后继续执行,这些的耗时。现在我们来1000个线程,也就是1000个搬运工来搬砖,那么楼道就会产生阻塞,效率变得更加低下,反而有可能不如单线程了,线程的切换执行也是消耗资源和时间的,所以我们需要找到合适的线程数,让工作效率最大化,同时又要充分利用CPU的资源。

 

            本次我们了解并发,并行,进程,线程的概念,在下一次更新中,我们就开始聊一个Java中的线程创建,与生命周期。

            

            

【Java多线程】并发编程不得不知的重要概念(持续更新) 1. 串行:一个线程执行到底,相当于单线程。 2. 并发:多个线程交替执行,抢占cpu的时间片,但是速度很快,在外人看来就像是多个线程同时执行。 3. 并行:多个线程在不同的cpu中同时执行。 阅读详情

相关推荐

freertos移植心得

1.freertos移植msp430 今天终于移植成功了freertos。现在写下这篇博文来整理这一路移植过程中遇到的问题和心得。 由于使用的是IAR FOR MSP430的IDE,博文只讨论在IAR下的移植。本文针对的是官方支持的平台架构下的移植,不使用官方提供的demo,得到的是一个纯洁版的系统。 1.下载源代码 在freertos的官网下载一份最新的源代码点击打开链接。 2.选择平

一条狗的博客 4173

JAVA语言-并发/多线程-并发编程基础-基本概念

并发编程基础并发与并行进程与线程线程调度 并发与并行 并发:指两个或多个事件在同一个时间段内发生。 并行:指两个或多个事件在同一时刻发生(同时发生)。 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分 时交替运行的时间是非常短的。 而在多个 CPU 系统中,则这些可以并发执行的程序便可以分配到多个处理器上(CPU),实现多任务并行执行,即利用每个处理器来

Kevin Wang的博客 248

[FPGA高速以太网]基于Verilog与1G/2.5G Ethernet PCS/PMA IP核的2.5G UDP通信实战

本文详细介绍了基于FPGA与1G/2.5G Ethernet PCS/PMA IP核实现2.5G UDP通信的完整实战方案。文章以黑金AX7A200开发板为硬件平台,深入讲解了从硬件选型、IP核配置、Verilog测试逻辑编写到系统调试与性能验证的全过程,重点剖析了利用SGMII接口与GTP收发器实现高速数据传输的关键技术与避坑指南,为FPGA高速以太网应用开发提供了宝贵经验。

sql99的博客 568

java并发编程之初识线程

java并发编程之初识线程说明线程生命周期线程创建线程间通信线程池生产者消费者实例 说明 操作系统运行一个程序就会创建一个进程,例如我们一个main函数程序启动了,就会创建一个java进程,然后有一个main主线程和其他线程(至少一个垃圾回收线程),这时我们如果想java做的任务更多时间更少就可以创建更多线程,这样能够最大化利用cpu,更快响应。 线程生命周期 线程创建 线程间通信 线程池 生产...

FOREVER_DO 1079

RK-XCKU5P RoCEv2 传感器桥工程分析报告

烧入后这块 FPGA 就是一个固定身份(CA:FE:C0:FF:EE:00 / 192.168.0.2 / 无 FEC 100G)的RoCEv2 UC 端点,每秒在 UDP 12267 广播自报家门;对端 CX5 只要关 FEC、配 192.168.0.101 +MTU 4200,就能 ping 通它、用 UDP 8192 读写它的全部寄存器、再按"ECB 旁路交换 QPN/rkey"的方式建立 UC RDMA 通道收发数据。

eloudy的专栏 245

STM32F407 CubeMX UART DMA高效解析BNO085九轴数据

本文详细介绍了如何在STM32F407平台上使用CubeMX配置UART和DMA高效解析BNO085九轴传感器数据。通过DMA循环接收机制实现低CPU占用的实时数据采集,并分享数据解析技巧、错误处理及实战调试经验,为嵌入式开发者提供完整解决方案。

o4p5q6r7s的博客 235

Java 并发和多线程

Java并发和多线程

m0_72674204的博客 903

超详细Tokenizer——文本训练数据预处理

Tokenizer是Keras库中的一个文本处理工具,它用于将文本分词并构建词汇表,同时将文本映射到整数序列。这对于自然语言处理任务非常有用,例如文本分类、情感分析、机器翻译等。

halo的博客 3701

Java并发编程(一):多线程与并发原理回顾

Java并发编程的基础回顾,面试经常会问的多线程基础问题,你真的Get到了吗?

FNTP_ 568

生产环境下oracle19c rac恢复节点2

现状:目前节点1数据库集群服务处于正常,节点2服务器由于系统故障无法恢复,确认系统重装。目标:不影响业务的情况下,重新把节点2添加回集群中。

sqlora的专栏 867

大连理工大学中文情感词汇本体库(含情绪分析代码)

中文文本数据的情绪计算昨天如何对微博推文进行情绪分析(细粒度情感分析)介绍了英文的NRC情绪词典。虽然支持中文,但由于制作问题,导致并不完全适应中文场景。今天介绍大连理工大学中文情感...

大邓和他的Python 4万+

进程通信与线程初识

一.进程通信机制 进程间通信的IPC(Inter-Process Communication)机制:通过队列来实现进程间的数据共享 底层队列通过管道和锁定实现 队列初识 # from multiprocessing import Queue q = Queue(5) # 不传参数,默认是这个队列的最大存储数 for i in range(5) : ...

bangzheqd219885的博客 162

逆向工程实战:手把手教你破解药监局网站的动态数据加载机制(Python+Chrome开发者工具)

本文详细介绍了如何利用Python和Chrome开发者工具逆向破解药监局网站的动态数据加载机制。通过分析Ajax请求、解析JSON响应数据以及处理动态参数,帮助开发者高效采集动态加载内容,适用于爬虫开发与数据分析场景。

weixin_30832143的博客 67

【3】Java并发编程:多线程基本概念

Java并发编程一直是开发学习中的重点和难点,难在于许多的基本概念不是短时间内就容易理解。下面就Java并发编程中的涉及多线程的基本概念做一个总结:1、TPS(Transactions Per Second,每秒事务处理数) : 一秒内服务端平均能响应的请求总数 2、高速缓存Cache 3、Java内存模型(Java Memory Model):变量、工作内存、主内存 4、Java内存模型:

happy_horse的博客 3405

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深入浅出Java多线程从基础概念到高级并发编程实战

Java并发包(java.util.concurrent)提供了线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList,它们通过分段锁或写时复制技术实现高效并发。原子类(如AtomicInteger)使用CAS(Compare-And-Swap)操作保证单个变量的原子性,无需加锁,性能更高。此外,Java.util.concurrent.locks包提供了更灵活的Lock接口,如ReentrantLock,它支持公平锁、条件变量等高级特性。

u011779969的博客 271

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java中的多线程并发编程核心概念与最佳实践解析

volatile关键字则保证了变量的可见性,即一个线程修改了变量,其他线程可以立即看到修改后的值。因此,使用线程池来管理线程是一种最佳实践。例如,CPU密集型任务适合使用较小的线程池,而IO密集型任务则可以使用较大的线程池。性能优化方面,应尽量减少同步块的大小,使用读写锁(ReadWriteLock)来提高读多写少场景的性能,并利用Fork/Join框架来分解大规模任务。Java多线程并发编程是Java语言中至关重要的一部分,它允许程序同时执行多个任务,从而提高应用程序的效率和响应能力。

qq964040的博客 359

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java多线程并发编程深度解析从基础概念到高级应用

同一个进程中的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈。此外,从Java 5开始,还可以使用Callable和Future创建线程,这两种方式可以获取线程执行结果,为异步编程提供了更多可能性。除了synchronized,Java还提供了更灵活的锁机制,如ReentrantLock,它支持公平锁、可中断的锁获取和定时锁等待等高级特性。### 深入理解线程池原理与应用线程池是管理和复用线程的重要机制,可以有效减少线程创建和销毁的开销。

ren_zizui的博客 299

深入理解Java中的多线程并发编程核心概念与最佳实践

好的,请阅览以下关于深入理解Java多线程并发编程核心概念与最佳实践的原创文章。

t13218881126的博客 597

深入理解Java中的多线程与并发编程核心概念与实践指南

原子类(如AtomicInteger)通过CAS(Compare-And-Swap)操作提供了非阻塞的原子性更新,相比锁机制性能更高,避免了线程上下文切换的开销。Java内存模型定义了线程与主内存之间的抽象关系,它规定了线程如何以及何时可以看到其他线程修改过的共享变量。Java通过Executors工厂类提供了多种类型的线程池,如固定大小的newFixedThreadPool、可缓存的newCachedThreadPool以及支持定时任务的newScheduledThreadPool。

SPM613110的博客 237

Java并发编程:序章(多线程,多任务,并发的概念)

Java并发编程是Java开发中一个非常重要的领域,它主要关注如何在程序中有效地处理多个任务或操作同时进行的情况。这通常涉及到使用多线程或多进程技术来提高程序的性能和响应能力。下面我将概述Java并发编程的基础概念,并介绍多线程、多任务以及并发的基本原理。

qq_33240556的博客 384

Java多线程-并发编程概念

Java多线程之并发编程模型

Eddy的博客 560

Java并发编程:(多线程,多任务,并发的概念)

通过合理地运用这些技术,Java开发人员可以构建高效的并发程序,从而更好地利用现代计算机硬件资源,并解决复杂环境下的性能和扩展性问题。Java并发编程是Java编程语言中处理多任务和执行多个操作同时进行(至少从逻辑上来看是同时的)的能力。

qq_33240556的博客 465
上一篇: Netty 群组聊天与管理
下一篇: Java 创建线程的方式
JavaBoy王皓
博客等级 码龄11年 23粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值