面试问到多线程看这一篇就够了

什么是进程?
进程是执行中的程序,是多个线程的集合,一个操作系统可以有多个进程,其中一定有一个主线程

什么是程序原子性?
整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。

死锁:获取锁的线程执行的代码报错了,无法释放锁,就造成死锁了

同步块和同步函数和静态同步代码块的区别
同步代码块:自己指定锁
静态代码块:class锁
同步函数:this锁
静态同步函数:class锁

this锁和object锁和class锁的区别?
this锁:这个对象用的同一把锁
object锁:指定对象用的同一把锁
class锁:这个类用的同一把锁

同步函数用的什么锁?怎么证明?
用的是this锁
证明

静态成员变量和非静态成员变量是什么时候初始化的?
静态成员变量:类加载
非静态成员变量:调用构造函数

什么是协程?
一个进程有多个线程,一个线程由多个协程

volatile的作用
被volatile关键字修饰的变量,如果值发生了变更,其他线程立马可见,避免出现脏读的现象。
保证线程之间可见,但不保证原子性,就是不保证线程安全

本地内存?主内存?

AtomicInteger JDK1.5并发包原子类
AtomicInteger a
tomicInteger = new AtomicInteger(0);

什么是多线程通讯?多线程之间如何通讯?
多个线程对同一个资源(共享资源),每个线程对共享资源做的动作不同,操作不同

wait和notify和notifyAll的区别?
wait释放锁,阻塞
notify唤醒
notify唤醒所有线程

ThreadLocal是什么?
为每一个线程提供一个局部变量,而不去共享变量
ThreadLocal.get 泛型

synchronized也叫内置锁
代码开始上锁
代码结束解锁

synchronized和lock的区别
自动挡和手动挡

synchronized容易造成死锁,性能不好,不灵活

数据库连接池-jdbc连接优化管理

什么是线程池?作用?
1、重复利用,降低资源消耗
2、省了许多生命周期的步骤,提高响应速度
3、方便管理线程,队列
核心ThreadPollExecutor
经常创建启动销毁线程是非常消耗时间的
使用线程池管理线程,可以节约时间和cpu资源

java锁有哪些?
1、悲观锁:每次拿数据的时候都会上锁,只能保证一个连接进行操作效率低,自带排它锁功能
2、乐观锁:无锁,通过版本标识控制线程同步
3、自旋锁:通过cas不断循环
4、读写锁:写的时候不让其他读和写,和zk同步的时候服务不让用一个道理
5、重入锁:synchronized,lock,把锁传递给下一个,不会重新创建,一个方法调用另一个方法的时候,锁会传递给被调用的那个,两个方法都加synchronized
6、排它锁:
7、CAS无锁:类似乐观锁,原子类就是使用这个,效率很高。V更新变量值 E期望值 N新值,
8、分段锁:
9、分布式锁:

数据库锁:
1、行锁:

ConcurrentHashMap
分段锁 16段
拆分成多个小的hashtable

停止线程
创建线程池的四种方式

发布了52 篇原创文章 · 获赞 2 · 访问量 1859

猜你喜欢

转载自blog.csdn.net/qq_42972645/article/details/104839227