2019.09.11

                     

   3.3 JMM是围绕着程序执行的原子性、有序性、可见性展开的。

          原子性:一个操作是不可中断的。

          有序性:单线程,按顺序依次执行;多线程,可能出现乱序现象,指令重排现象和工作内存与主内存同步延迟现象

          可见性:当一个线程修改了某个共享变量的值,其他线程是否能够马上得知这个修改的值。

   3.4 volatile作用:1)当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。

                               2)禁止指令重排序优化。

 

  事务并发问题:

  脏读:事务A读了B更新的数据,B回滚,A读了脏数据

 不可重复读:一个事务两次读取的不一致(侧重修改)

  幻读:一个事务发现了未被操作的数据(侧重增删)

  四种 事务的隔离级别,解决并发问题,进行并发控制。

    1)读未提交:不允许第一类更新丢失。允许脏读,不隔离事务。

                             事务读不阻塞其他事务读和写,事务写阻塞其他事务写但不阻塞读。
 可以通过写操作加“持续-X锁”实现。

    2) 读已提交:不允许脏读,允许不可重复读。(Oracle默认使用的隔离级别)

                           事务读不会阻塞其他事务读和写,事务写会阻塞其他事务读和写。可以通过写操作加“持续-X”锁读操作加“临时-S锁”实现

    3)可重复读:不允许不可重复读。但可能出现幻读。(Mysql默认使用的隔离级别)

                        事务读会阻塞其他事务事务写但不阻塞读,事务写会阻塞其他事务读和写。
可以通过写操作加“持续-X”锁,读操作加“持续-S锁”实现。

    4) 串行化:所有的增删改查串行执行。

                    “行级锁”做不到,需使用“表级锁”。

可串行化:如果一个并行调度的结果等价于某一个串行调度的结果,那么这个并行调度是可串行化的。

    

10. 进程和线程的区别是什么?

   进程是CPU分配资源的最小单元,线程是CPU调度的基本单元,一个进程可以包含多个线程。必须至少有一个进程。

   为什么有时候使用线程而不用进程?

    因为进程启动的时候cpu需要给他分配资源,对系统压力比线程大,线程是轻量级的进程。

    进程间通信的方式有什么?socket  管道 信号量  消息  共享内存

    线程间通信的方式有什么?直接共享变量  管道

11. 产生死锁的四个条件:互斥、请求与保持、不可剥夺、循环等待

      避免死锁,破坏任意一个条件即可:拷贝一份、主动放弃资源、强占、加锁(死锁检测,银行家算法)

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值