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中同时执行。 阅读详情

相关推荐

【寄存器模型】二、前门访问与后门访问

1.后门访问可以更好的完成前门访问能够完成的事情:后门访问不消耗仿真时间,且消耗的运行时间也远小于前门访问的运行时间。 2.后门访问可以完成前门访问不能完成的事:对于某些特定的场景,如网络通信系统中的一些只读计数器,当要验证计数器进位归零的场景时,前门访问无法完成写寄存器操作,只能通过消耗仿真时间来使计数器到达特定的计数值。而后门访问可以直接对只读寄存器赋一个初值......

carrotbanana的博客 9657

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

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

Kevin Wang的博客 248

Bode图、ABCD矩阵与EET结合:三步搞定复杂电路传递函数分析

在模拟电路与电源控制设计中,传递函数和频率响应是衡量系统稳定性的核心指标。Bode图以直观的幅频/相频曲线揭示带宽与相位裕度,ABCD二端口矩阵可将级联网络结构化表达,而EET额外元素定理则针对寄生电容、负载效应等局部修正提供显式公式。三者互补,组合成一套从整体拓扑到局部寄生修正的完整分析方法:先用ABCD搭建主体网络,再用EET快速加入额外元件,最后用Bode图验证传递函数和稳定裕度。该方法适用于滤波器设计、电源环路补偿、运放稳定性分析等线性小信号场景,支持Python/SciPy和SPICE交叉验证,显

weixin_32496547的博客 363

java并发编程之初识线程

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

FOREVER_DO 1079

vcs 覆盖率收集1——三种覆盖率类型、covergroup、bins、数据采样、覆盖率选项

介绍各种覆盖率,以及如何编写覆盖率收集的代码

qq_42135020的博客 1万+

python 识别滑块验证码

博客来源于: https://www.cnblogs.com/wyh0923/p/16528354.html # -*- coding: utf-8 -*- # https://gov.pkulaw.cn/ 1. import io 2. import json 3. from pathlib import Path 4. from PIL import Image 5. import bas...

2102

Java 并发和多线程

Java并发和多线程

m0_72674204的博客 903

网络虚拟化介绍(OVS、DVS)

网络虚拟化概念网络虚拟化就是把网络层的一些功能从硬件中剥离出来,建立新的网络虚拟层;该虚拟层可以接管网络服务和配置,实现网络服务与物理层的解耦,打破物理资源限制;通过网络虚拟层能够在一个物理网络上模拟出多个逻辑网络,并且多用户在逻辑网络上相互隔离,保证网络安全网络虚拟化的特点隔离性:不同租户的流量相互之间不能互访;但是IP/MAC地址都可以独立规划可移动性:虚拟机可以跨二层/三层迁移,甚至可以跨广域网迁移(迁移前后虚拟机Vlan和IP地址都不会发生变化)可扩展性:逻辑网络的规模和数量可扩展。

m0_49864110的博客 1万+

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

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

FNTP_ 568

CATIA文件的网页预览方案

CATIA是工业设计中广泛使用的专业软件,产出`.CATPart`或 `.CATProduct`等文件类型,当资产数量较大时,我们希望快捷预览这些文件,就有了`CATPart`文件网页预览的需求 但我们知道,网页上无法直接渲染`CATPart`这种复杂的文件, CATIA生成的文件(如 `CATPart` 和 `CATProduct`)不仅包含三维几何信息(例如点、线和曲面),还涵盖了丰富的元数据与专业设计特征。 那有没有办法,能实现CATIA文件在网页上的便捷预览?

weixin_44211633的博客 1449

[QMT量化交易小白入门]-九、如何用Python记录每一笔交易和调试,报错信息?

定义一个函数来获取日志记录器。: 返回全局的日志记录器,以便在其他地方调用。

木头大左的博客 2143

进程通信与线程初识

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

bangzheqd219885的博客 162

Qt/C++ 音视频开发 - FFmpeg 安卓版

通过将 FFmpeg 集成到 Qt/C++ 项目中,我们可以实现强大且灵活的音视频处理功能。本文介绍了在安卓平台上使用 FFmpeg 的基本步骤,包括初始化、解码、处理和编码等。实际应用代码示例展示了如何在安卓设备上播放视频。

走向CTO的路上... 1190

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

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

happy_horse的博客 3405

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

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

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

u011779969的博客 271

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

qq964040的博客 359

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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、付费专栏及课程。

余额充值