互联网校招面试必备——Java多线程

2015互联网校招总结—一路走来 结束了在百度的实习,是时候写下校招的总结了,再不写估计很多东西都忘了。在开源社区混迹久了,从别人的学习、求职、工作经历中越发感受到很多的正能量,也本着攒RP的原则,向学弟学妹们,尤其非名校的学弟学妹们传递点正能量,因为博主也是非名校出身,而且在整个求职的过程中能够很明显地感受到名校学生那种得天独厚的优势,同样的实力,名校学生进入BAT等一线互联网企业确实要容易很多,即便技术很水,一样有华为等企业保底,而非名校的可能连简历筛选这关都过不了。博主说这些,并不是为了打击非名校的学生,只是,这些确实是事实,既然无法 阅读详情

顺序、并发与并行

顺序

用于表示多个操作“依次处理”。比如把十个操作交给一个人来处理时,这个人要一个一个地按顺序来处理

并行

用于标识多个操作“同时处理”。比如十个操作分给两个人处理时,这两个人就会并行来处理。

并发

相对于顺序和并行来说比较抽象,用于表示“将一个操作分割成多个部分并且允许无序处理”。比如将十个操作分成相对独立的两类,这样便能够开始并发处理了。如果一个人来处理,这个人就是顺序处理分开的并发操作,而如果是两个人,这两个人就可以并行处理同一个操作。

总结

多线程程序都是并发处理的。如果 CPU 只有一个,那么并发处理就是顺序执行的,而如果有多个 CPU,那么并发处理就可能会并行运行。

并发处理的顺序执行与并发处理的并行执行示意图如下所示

 

 

线程启动与中止

启动方式

  • 利用 Thread 类的子类的实例启动线程
  • 利用 Runnable 接口的实现类的实例启动线程

以上两种方式都需要使用 start 方法用于启动新的线程,在此需要注意的事情是,启动新线程调用的是 start 方法而不是 run 方法

终止

直到所有的线程都终止后,程序才会终止。也就是说,当这两个线程都终止后,程序才会终止。

Java 程序的终止是指除守护线程以外的线程全部终止。守护线程是执行后台作业的线程。我们可以通过 setDaemon 方法把线程设置为守护线程。

小知识

java.util.concurrent 包中包含一个将线程创建抽象化的 ThreadFactory 接口。利用该接口,我们可以将 Runnable 作为传入参数并通过 new 创建 Thread 实例的处理隐藏在 ThreadFactory 内部。

Executors 类中含有多种创建 ThreadFactory 的方法,感兴趣的可以去看一下源码

synchronized 相关

synchronized 方法

如果声明一个方法时,在前面加上关键字 synchronized 那么这个方法就只能由一个线程运行。只能由一个线程运行是每次只能由一个线程运行的意思,并不是说仅能让某一特定线程运行。这种方法叫做 synchronized,有时也称为同步方法。

    synchronized void method() {
        ...
    }
复制代码

synchronized 代码块

如果只是想让方法中的某一部分由一个线程运行,而非整个方法,则可使用 synchronized 代码块

    synchronized (表达式) {
        ...
    }
复制代码

synchronized 实例方法和 synchronized 代码块

假设有如下 synchronized 实例方法

    synchronized void method() {
        ...
    }
复制代码

这跟下面将方法体用 synchronized 代码块包围起来是等效的

void method() {
    synchronized (this) {
        ...
    }
}
复制代码

synchronized 实例方法是使用 this 的锁来执行线程的互斥处理的

synchronized 静态方法和 synchronized 代码块

synchronized 静态方法和 synchronized 实例方法是相同的。但是 synchronized 静态方法使用的锁和 synchronized 实例方法使用的锁是不一样的

class Something {
    static synchronized void method() {
        ...
    }
}
复制代码

这跟下面将方法体用 synchronized 代码块包围起来是等效的

class Something {
    static void method() {
        synchronized (Something.class) {
            ...
        }
    }
}
复制代码

synchronized 静态方法是使用该类的类对象锁来执行线程的互斥处理的。 Something.class 是 Something 类对应的 java.lang.class 类的实例

wait、notify 和 notifyAll

等待队列

所有实例都拥有一个等待队列,它是在实例的 wait 方法执行后停止操作的线程队列。就好比为每个实例准备的线程休息室

在执行 wait 方法后,线程便会暂停操作,进入等待队列这个休息室。除非发生下列某一情况,否则线程会一直在等待队列中休眠。

  • 有其他线程的 notify 方法来唤醒线程
  • 有其他线程的 notifyAll 方法来唤醒线程
  • 有其他线程的 interrupt 方法来唤醒线程
  • wait 方法超时

若要执行 wait 方法,线程必须持有锁。但如果线程进入等待队列,便会释放其实例的锁

notify 方法

该方法会将等待队列中的一个线程去除。同 wait 方法一样,若要执行 notify 方法,线程也必须持有要调用的实例的锁。

notify 唤醒的线程并不会在执行 notify 的一瞬间就重新运行。因为在执行 notify 的那一瞬间,执行 notify 的线程还持有着锁,所以其他线程还无法获取这个实例的锁

notifyAll 方法

notify 方法仅唤醒一个线程,而 notifyAll 则唤醒所有线程,这是两者之间唯一的区别

同 wait 方法和 notify 方法一样, notifyAll 方法也只能由持有要调用的实例锁的线程调用

notify 和 notifyAll 选择

notify 方法和 notifyAll 方法非常相似,到底该使用哪个?

实际上,这很难选择,由于 notify 唤醒的线程较少,所以处理速度要比使用 notifyAll 时快。 但使用 notify 时,如果处理不好,程序便可能会停止。一般来说,使用 notifyAll 时的代码要比使用 notify 时的更为健壮。

博主最近整理出一套java零基础资料和架构资料

需要的话滴滴博主微:xuanwo013

面试总结(三)——连连支付 面试总结(三)——连连支付1、solr用什么分词2、关于Spring的面试题3、HashMap的结构4、HashMap和HashTable的区别5、B树和B+树6、Java数据类型,有几个字节7、重载和重写8、缓存器脏读和击穿的解决办法9、封装、继承、多态10、网络的7层模型11、TCP三次握手四次挥手12、进程和线程的区别 昨天下午(2019.4.25),连连支付来学校校招,我舔着个脸就跟着大部... 阅读详情

相关推荐

如何准备校招技术面试

2017 年互联网校招已近尾声,作为一个非 CS 专业的应届生,零 ACM 经验、零期刊论文发表,我通过自己的努力和准备,从找实习到校招一路运气不错,面试全部通过,谨以此文记录我的校招感悟。

brianway 5328

校招面试重点汇总之多线程(不多但都是高频面试题)

本文的题目从各个公司的面试题汇总而来,属于中大厂面试中常问到的点,题目不多,但都是非常高频的题目!

一入大数据深似海?别怕!“数据极客圈”就是你的救生圈,走对圈子跟对人,趣析数据、畅聊趋势,快进圈子! 2674

互联网公司校招Java面试题总结及答案——招银科技

部分重复的我已经去掉了,所以显得比较少,其他请参看我的系列文章: 互联网公司校招Java面试题总结及答案——乐视、滴滴、华为 互联网公司校招Java面试题总结及答案——CVTE 互联网公司校招Java面试题总结及答案——美团 ( 百度Java面经)互联网公司校招Java面试题总结及答案——百度(目前只是部分总结) 互联网公司校招Java面试题总结及答案——京东 ------------

The night of summer 1万+

互联网校招面试必备——Java多线程 | 掘金技术征文

本文首发于我的个人博客:尾尾部落 本文是我刷了几十篇一线互联网校招java后端开发岗位的面经后总结的多线程相关题目,虽然有点小长,但是面试前看一看,相信能帮你轻松啃下多线程这块大骨头。 什么是进程,什么是线程?为什么需要多线程编程? 进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活...

weixin_33794672的博客 1111

各大公司校招笔试面试多线程和并发历年真题总结

各大公司校招笔试面试多线程和并发历年真题总结,总共上百页吧。其他类目可以查看我上传的资源

光耦CTR参数实战:如何避免误触发与功耗陷阱(附计算公式)

本文深入解析光耦CTR参数在电路设计中的关键作用,探讨如何平衡误触发风险与功耗表现。通过TLP521、PC817等常见型号的实测数据对比,提供不同工作状态下的选型策略和计算公式,帮助工程师优化设计,提升系统稳定性和能效。

2a4s6d8f0g的博客 324

校招被面试官问到多线程,二话不说直接锤爆!

文章目录三、多线程何为线程线程与进程之间的关系程序计数器为什么是私有的虚拟机栈和本地方法栈为什么时私有的堆和方法区守护线程是什么线程的生命周期和状态上下文切换创建线程有哪几种方式说一说自己对于 synchronized 关键字的了解构造方法可以使用synchronized 关键字修饰吗?说一下 Runnable 和 Callable 有什么区别执行execute()方法和submit()方法的区别是什么呢?volatile和synchronized区别sleep() 和 wait() 有什么区别notify

XiaoLin 879

抖音直播行为规范考试

抖音直播行为规范考试

Q1642968641的博客 1万+

互联网公司校招Java面试题总结及答案——阿里、腾讯

部分重复的我已经去掉了,所以显得比较少,其他请参看我的系列文章: 互联网公司校招Java面试题总结及答案——京东 ( 百度Java面经)互联网公司校招Java面试题总结及答案——百度(目前只是部分总结) 互联网公司校招Java面试题总结及答案——美团 互联网公司校招Java面试题总结及答案——CVTE 互联网公司校招Java面试题总结及答案——乐视、滴滴、华为 互联网公司校招Java面试题总结及答案——招银科技 互联网公司校招Java面试题总结及答案——微店、去哪儿、蘑菇街 ----------------

iijik55的博客 244

最简解决 Unity Error Registry configuration is invalid Unable to connect https packages.unity.cn

前言 在学习其他大佬项目的时候,大佬说项目能直接运行,然后我拉下来就报如下错误 Unity报错:[Package Manager]Error Registry configuration is invalid:Unable to connect “https://packages.unity.cn” 翻了很多博发现是 unity3d 中国增强版的原因,中国增强版屏蔽了国外自定义的插件仓库。 安装 非中国增强版后可以成功打开。 然后大家给出的解决方案都比较激进,大抵就是更换Unity版本就OK了。 当然我是觉

Gipsyz的博客 6842

092、多sensor帧同步在环视系统中的实现——基于瑞芯微RK3588的PPS同步与曝光同步方案

摘要: 本文探讨了瑞芯微RK3588平台在360环视系统中实现多摄像头帧同步的技术方案。针对环视拼接常见的动态场景错位问题,提出了PPS同步与曝光同步相结合的解决方案。通过GPIO硬件触发实现四路摄像头同步曝光,配合I2C全局曝光控制,将时间误差控制在0.5ms内。文章详细解析了RK3588设备树配置、内核驱动实现中的关键细节,包括同步信号处理、寄存器原子写入等核心技术点,并分享了量产中遇到的温度漂移、信号完整性等实际问题及解决方法。最终通过硬件整形和电源优化,将同步抖动控制在±5μs以内,有效解决了动态拼

zzfmlxs的博客 34

Java校招经验

菜鸟修仙记 5239

【QT开发】web开发,内嵌网页展示和交互工具QWebEngineView类详解及实战应用

QWebEngineView 类为 Qt 应用提供了强大的网页展示和交互能力。通过合理运用其方法、属性和事件,能够创建出功能丰富、用户体验良好的网页浏览界面。在开发过程中,要注意处理常见问题,以确保网页的正常展示和交互效果。

科技改变人类,技术成就未来 2004

应届生如何准备校招,用我这一年的校招经历告诉你

前期准备 校招在我看来是一件时间特别长的战争,为什么这么说呢,因为从你开始准备校招的那一刻开始,到你正式拿到offer的,并且确定去哪一家公司时,时间差不多一年左右,这个时间其实比考研、公务员等都要长,你可能会问为什么需要这么长的时间,当然,这也跟个人的具体情况相关,每个人也会不一样的,但是,也差不了多少,大神级别的除外了。 这篇文章主要还是讲讲校招的整个流程,需要准备什么,遇到问题时怎么去解决,怎么去调整心态,这些都是很重要的,我也是把我个人的真实经历告诉大家,希望能够对大家有帮助。 选择方向 在我看来,

好好学java 7333

RTDETR最强结构图 | 包含模型整体结构图 | 全模块展开图 | AiFi模块展开图

RT-DETR 最全结构图

Coding... 9602

Matlab实现雷达波位编排

1 简介 %本程序用于雷达球坐标系到正弦空间坐标系的转换,以及相控阵雷达的波位编排。 2 完整代码 ​%070228添加波位数据保存clear allclose allclc%波束宽度,单位:度BeamWidth = 3.6;theta05 = round(sin(BeamWidth*pi/180)*1000)/1000;%雷达作用空域AZ = [-15 15]; %方位角范围(雷达球坐标系),单位:度EL = [0 30]; %俯仰角范围(雷

qq_59747472的博客 2480

互联网公司校招Java面试题总结及答案——网易

因为时间有限,所以这部分很多都没有整理答案,后序有时间再补上。 其他请参看我的系列文章: 互联网公司校招Java面试题总结及答案——阿里、腾讯 互联网公司校招Java面试题总结及答案——微店、去哪儿、蘑菇街 互联网公司校招Java面试题总结及答案——招银科技 互联网公司校招Java面试题总结及答案——乐视、滴滴、华为 互联网公司校招Java面试题总结及答案——CVTE 互联网公司

The night of summer 2万+

拉曼光谱入门:7.拉曼光谱仪光学系统结构详解

本文系统拆解了拉曼光谱仪从激光器输出经聚焦照明、二向色镜/陷波滤光片组滤除瑞丽散射、衍射光栅色散至CCD探测的完整光路,阐述了各光学模块在微弱非弹性散射信号提取、杂散光抑制及高分辨光谱成像中的工程原理与技术参数要求。

qq_53529450的博客 226

互联网公司校招Java面试题总结及答案——搜狐

其他请参看我的系列文章: 互联网公司校招Java面试题总结及答案——网易 互联网公司校招Java面试题总结及答案——阿里、腾讯 互联网公司校招Java面试题总结及答案——微店、去哪儿、蘑菇街 互联网公司校招Java面试题总结及答案——招银科技 互联网公司校招Java面试题总结及答案——乐视、滴滴、华为 互联网公司校招Java面试题总结及答案——CVTE 互联网公司校招Java面试题总

The night of summer 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【2020校招总结】接受社会的毒打,收获腾讯天美、字节跳动、网易互娱、华为等offer(开发岗)

总结大半年校招经历,希望帮助更多今后想从事软件开发岗的应届同学。

チン昶的博客 5578

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

互联网公司校招 Java 面试题总结及答案之阿里腾讯 Java 校招面试题汇总解析

本文总结了阿里、腾讯等互联网大厂校招Java面试的常见考点及答案,涵盖Java基础、多线程、集合框架、数据库和主流框架等内容。重点解析了数据类型、面向对象特性、线程安全、HashMap原理、SQL优化、Spring IOC等核心知识点。文章还对比了JDK1.7和1.8中HashMap实现的差异,以及不同事务隔离级别的特点。内容系统全面,适合Java校招求职者复习准备,帮助掌握面试所需的关键技术要点和解题思路。

sss191s的博客 740

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: Google 官方推出应用开发架构指南
下一篇: 你竟然还不知道 新架构组件:WorkManager?
Java架构技术官
博客等级 码龄6年 9粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值