前言
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
持续更新完善中......