JAVA基础之多线程(一)

本文探讨了并发与并行的区别,强调了多线程中的原子性、可见性和有序性三大特性,特别是可见性的重要性。通过解释线程如何操作共享变量,阐述了保持数据一致性的必要性。此外,文章还简单介绍了线程池的工作原理,并提及线程池在面试中的常见问题。最后,作者作为初级程序员分享了个人的学习经历和心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        提起多线程,相信也是很多程序员的短板之一,由于在平时开发过程中很少有机会写到多线程,所以也只是了解这个东西,顶多也是在背面试题的时候去了背背相关面试题,小编也是通过公司技术分享和自己平时面试遇到的一些问题作了一下整理。

        首先了解一下并发和并行,并发是指在一个时间段内,两个或者多个线程在同一个cpu快速的切换执行程序,在宏观层面可以认为是同时进行,但是在微观层面还是单个的执行。并行是多个线程在不同的cpu上面同一时刻运行,是真正意义上的同时执行。

        我们常常是并发三大特性,原子性、可见性和有序性。小编之前也是在面试过程中被问到,为什么要保证可见性,如果没有可见性会有什么问题?

        这里就要说说线程到底是怎么操作我们的数据的,大家可以想一下,我们在多线程操作一个共享变量的是直接操作这个变量的吗?答案是否定的。其实每个线程操作的是共享变量的副本!,变量的值存在主存中,会为每个线程copy一个副本给他们操作,操作完成了再回显给主存修改掉主存的值,那么问题就来了,线程之间怎么知道另一个线程以及将之间副本的值修改完了并且回显给了主存呢。如果不知道那是否一个线程明明以及修改了值,结果另一个线程有给他改回去了呢?所以可见性就体现在这个地方,保证了可见性。常见的保证可见性可以用ReentrantLock、vloliate、synchronized这三个关键字或者类来保证可见性。

        那么聊到线程就要聊到线程池,这也是面试高频问题。大家都知道线程池是管理线程的一个容器,他可以实现复用线程,可以更好的对线程进行调配和管理。那么线程在线程池中到底是怎么运作的呢?这里用一张图就可以很明了看出线程池的工作流程。

除此之外,线程池的七大核心参数这里就不一一介绍了,这也是面试高频题。

小编也只是今年刚毕业的萌新程序员一枚,写博客只是个人兴趣,以及想把自己了解到的知识记录下来,如果有大佬看到了欢迎指正呀。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值