Java多线程/高并发面试

前言

Github:https://github.com/yihonglei/thinking-in-concurrent(Java并发编程)

Blog:https://blog.csdn.net/yhl_jxy/category_9285626.html(Java并发编程源码分析)

一 Java中线程实现方式?

常用三种实现方式:Runnable,Thread,Callable。

https://blog.csdn.net/yhl_jxy/article/details/86665107

二 用Runnable还是Thread?

Thread是对Runnable的包装,提供常用的方法,直接继承Thread即可。

但是Java只支持单继承,用Thread继承方式弊端就是对于一个已经有继承的类,就是用不了Thread方式了。

实际中一般实现Runnable接口,Java支持多实现,更灵活。

三 Thread 类中的start() 和 run() 方法有什么区别?

start()负责启动线程,什么时候执行由CPU时间片分配调度;

run()是线程具体执行的方法,执行你的业务代码等;

四 Java中Runnable和Callable有什么不同?

Runnable没有返回值;

Callable有返回值,通过对线程执行结果封装在一个Object里面,然后通过get获取该Object,实现有返回值方式;

五 Java线程池中submit() 和 execute()方法有什么区别?

submit()有返回值;

execute()无返回值;

六 Java中CyclicBarrier 和 CountDownLatch有什么不同?

CyclicBarrier(栅栏),用于阻塞多个线程,达到条件同时执行;

CountDownLatch(闭锁),用于等待多个操作执行完(比如多个线程)再执行某个动作(比如执行主线程);

底层都是基于AQS实现,AQS是一个基于volatile共享变量state,双端队列,线程的等待和唤醒共同实现的一个

同步器,典型的模板方法模式,是Java并发包的基础实现。

AQS同步器源码分析:https://blog.csdn.net/yhl_jxy/article/details/102535590

CyclicBarrier源码分析:https://blog.csdn.net/yhl_jxy/article/details/87256321

CountDownLatch源码分析:https://blog.csdn.net/yhl_jxy/article/details/87181895

七 Java内存模型是什么?

Java内存模型是接机Java线程通信的基础,通过CPU #Lock指令实现线程副本和主内存更新机制,实现线程通信的方式等。

Java内存模型:https://blog.csdn.net/yhl_jxy/article/details/103216421

八 Java中的volatile 变量是什么?

volatile是轻量级的同步机制,具有内存可见性和指令重排序的特性,但是它代替不了Java里面的锁。

volatile实战和实现原理分析:https://blog.csdn.net/yhl_jxy/article/details/87072642

九 Java中Semaphore是什么?

主要用于处理限流。

Semaphore源码分析:https://blog.csdn.net/yhl_jxy/article/details/87279383

JDK自带线城市,如果你提交任务时,线程池队列已满。会时发会生什么?

十 Java里面常见的锁和实现机制?

java锁:https://blog.csdn.net/yhl_jxy/article/details/101687960

持续更新完善中......

发布了502 篇原创文章 · 获赞 358 · 访问量 118万+

猜你喜欢

转载自blog.csdn.net/yhl_jxy/article/details/88129687