Java的内存模型-JMM
线程A先将变量从共享内存保存到本地内存(可以是寄存器),修改后,再写入到共享内存中。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。
为了解决这个问题,我们用volatile关键字(1:防止指令重排序 (2:保证变量的可见性
修改后的变量值会直接主内存,不走本地内存
简单来说:volatile是去保证可见性,synchronized是保证原子性,volatile只能去修饰变量
线程池
创建若干线程放在一个池中,如果有任务来了,会将任务放在任务队列中,线程去执行,处理完线程不会被释放,会重新回到线程池
线程池的好处
1:创建线程是比较消耗资源的
2:任务不用线程的创建
3:提高线程的可管理性
Runnable和Callable的区别
Callable会返回结果或者抛出异常,而Runnable不会
线程池的饱和策略
AbortPolicy--直接拒绝策略,默认
CallerRunsPolicy--提交任务的线程去执行任务
DiscardPolicy---直接丢弃任务
DiscardOldestPolicy---丢弃最老的任务
Mysql的主从复制
主要是去记这个图的原理
了解三大日志
redo log是和innoDB有关,binlog是和Server有关
redo log
redo log-记录的是某一数据页,修改了哪些内容
看该图就能明白redo的工作原理
binlog
记录事务的MySQL的逻辑语句