查看原文
其他

干货领取 | 90页PDF,彻底拿下Java并发

SpringForAll 2022-07-05

又到了分享学习资料的时间!


友情指路:

第一期:Spring系列;

第二期:MySQL系列;

第三期:SpringCloud专题

点击链接跳转,即可领取之前分享的精选资料


今天分享的是Java并发面试资料


这份资料包含Java基础面试题、内存模型、锁、并发工具和线程池五大部分。


老规矩,为了方便大家保存和阅读,我把完整资料和答案打包为pdf。


关注下方公众号SpringForAll社区,回复关键词【并发2022】,即可免费领取完整pdf资料!。

部分资料内容:

线程有几种状态?

在Java中,线程共有六种状态:

线程在自身的生命周期中, 并不是固定地处于某个状态,而是随着代码的执行在不同的状态之间进行切换,Java线程状态变化如图示:

Java线程状态变化

线程间有哪些通信方式?

线程间通信方式

  • volatile和synchronized关键字

关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问的可见性。

关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性。

  • 等待/通知机制

可以通过Java内置的等待/通知机制(wait()/notify())实现一个线程修改一个对象的值,而另一个线程感知到了变化,然后进行相应的操作。

  • 管道输入/输出流

管道输入/输出流和普通的文件输入/输出流或者网络输入/输出流不同之处在于,它主要用于线程之间的数据传输,而传输的媒介为内存。

管道输入/输出流主要包括了如下4种具体实现:PipedOutputStream、PipedInputStream、 PipedReader和PipedWriter,前两种面向字节,而后两种面向字符。

  • 使用Thread.join()

如果一个线程A执行了thread.join()语句,其含义是:当前线程A等待thread线程终止之后才从thread.join()返回。。线程Thread除了提供join()方法之外,还提供了join(long millis)和join(long millis,int nanos)两个具备超时特性的方法。

  • 使用ThreadLocal

ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。

可以通过set(T)方法来设置一个值,在当前线程下再通过get()方法获取到原先设置的值。




为方便大家领取

我已经将所有题目和答案整理好了

关注下方公众号,回复关键词"并发2022"

即可免费领取pdf资料👇👇

关注公众号后端面试那些事
回复关键词【简历】,
免费领取大厂优质word简历模板
大家下期想看什么,赶快留言告诉我吧~

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存