在前面研究过多线程与进程的区别。

这里在稍微总结一下:

进程:程序动态的一次执行过程。

线程:可以只是程序员的一部分的执行过程

每个进程有多个线程组成,在java程序中,至少两个线程一个是垃圾回收线程和main线程。

线程占有的资源更少,早java中就是每个线程都有自己的工作区,就是有自己独立的栈空间。多个线程共享一些内存资源,堆是共享的。

多线程的力度小,并发度高,这样系统的吞吐量就很大,只有好处吗?调度和执行线程是需要资源的,就是像是数据库中的索引和数据库中的锁一个道理,并发会带来什么问题呢?跟db,os一样一样的。

1.丢失更新(两个人同时读取一个账号为1000元,一个update 为1000-10,另一个Upadate为1000-800,根据先后顺序,只有200或者990写进数据库);

2.读取脏数据

3.不可重复读

4死锁的产生 

死锁产生4个的必要条件:a.互斥访问b.不可剥夺c.请求和保持d.成环等待

破解期中之一就ok了,但是其实这里实现死锁避免的思路主要可以考虑请求和保持,还有成环等待。

对于请求和保持,就是让线程一次要么申请全部线程,要不申请不到,这个效率太低了。

如何避免环呢?给资源排序?数据库中给事务加了年龄,让年老的等年轻的货年轻的等年老的,不会出现相互等待。

死锁的检测方法:死锁可以通过一个等待图中是否有环来判断,如何判断有向图有环?对了(topsort和dfs的方法)

如果检测到死锁呢?可以剥夺其中若干事务的资源,就可以了。

另外死锁是一种僵持的状态,如果没有外力作用,系统不能推进下去了。

 

最新文章

  1. wireshark 相关提示
  2. Photoshop投影和CSS box-shadow转换
  3. 救命 ,IE,崩溃
  4. 002.ICMP--拼接ICMP包,实现简单Ping程序(原始套接字)
  5. 制作计算器的代码(C#)
  6. Discuz!nt整合心得
  7. javascript 实用函数
  8. Swift中子类必须包含的构造器和析构器
  9. 向.net后端发送请求获取数据,在前端动态填充表格
  10. javascript之日期对象
  11. RAP在Linux 上的部署
  12. 监控利器 sysdig - 每天5分钟玩转 Docker 容器技术(79)
  13. Api管家系列(二):编辑和继承Class
  14. mssql sqlserver 三种数据表数据去重方法分享
  15. Nginx命令行控制
  16. 通过mysqlbinlog 恢复数据
  17. 三.linux磁盘与文件系统
  18. js数组去除重复
  19. Python—合并两个有序列表
  20. git diff 分支1 分支2 --stat命令没有将所有的不同显示出来

热门文章

  1. [Mime] MediaTypes--电子邮件类型类 (转载)
  2. BroadcastReceiver和Intetnt的理解 Day34
  3. xp和win 2003远程桌面强制进入命令
  4. .NET中的委托——摘自MSDN
  5. JavaScript H5 Canvas
  6. Javascript 中 call 的两种用法
  7. 机器学习系列(17)_Yelper推荐系统
  8. js实现中文简繁切换效果
  9. 【原】K3Cloud平台开发之Python插件
  10. jquery添加元素