干货!90页PDF,彻底拿下Java并发
又到了分享学习资料的时间!
友情指路:
第一期:Spring系列;
第二期:MySQL系列;
点击链接跳转,即可领取之前分享的精选资料
今天分享的是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资料👇👇