Java的并发

Java的内存模型-JMM

线程A先将变量从共享内存保存到本地内存(可以是寄存器),修改后,再写入到共享内存中。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。

image.png

为了解决这个问题,我们用volatile关键字(1:防止指令重排序 (2:保证变量的可见性
修改后的变量值会直接主内存,不走本地内存
image.png

image.png

简单来说:volatile是去保证可见性,synchronized是保证原子性,volatile只能去修饰变量
image.png

线程池

创建若干线程放在一个池中,如果有任务来了,会将任务放在任务队列中,线程去执行,处理完线程不会被释放,会重新回到线程池
线程池的好处
1:创建线程是比较消耗资源的
2:任务不用线程的创建
3:提高线程的可管理性

Runnable和Callable的区别

Callable会返回结果或者抛出异常,而Runnable不会


image.png

线程池的饱和策略

AbortPolicy--直接拒绝策略,默认
CallerRunsPolicy--提交任务的线程去执行任务
DiscardPolicy---直接丢弃任务
DiscardOldestPolicy---丢弃最老的任务

Mysql的主从复制

主要是去记这个图的原理


image.png

了解三大日志

redo log是和innoDB有关,binlog是和Server有关


image.png
redo log

redo log-记录的是某一数据页,修改了哪些内容


image.png

看该图就能明白redo的工作原理


image.png
binlog

记录事务的MySQL的逻辑语句


image.png
undolog
image.png
image.png

image.png

image.png

你可能感兴趣的:(Java的并发)