复习一下,重温视频,练习细节。

一、知识点

(1)dom解析xml文件

先把整个xml文件都加载到内存中,然后逐个解析。

(2)sax解析

通过自己创建的的handler处理类,去逐个分析遇到的每个节点,依次进行从外层到内层依次解析。

(3)线程的join方法

强行插入正在进行的线程中,抢夺cpu的资源。等待join的线程执行完,才会交还给源程序。

(4)synchronized

两种使用方法:

  1. 同步代码块:synchronized(this){}
  2. 同步方法(函数的类型前面加个synchronized):public synchronized string(){}

(5)stop()方法

在eclipse被画上了横线….由于过于粗暴,让程序莫名其妙地戛然而止,容易导致各种问题,所以被淘汰了。

(6)volatile

volatile是保证所有子线程里的变量都能同步到主内存里变量的值。

(7)既然不能使用stop(),那么如何停止线程?

使用退出标志.比如while控制线程.

主要是因为标志可以完整的执行一个步骤,不容易戛然而止,比较安全.

(8)多服务器情况下如何处理共享资源

别人的问答录:

问:

假设一个应用程序中存在多线程,而应用同时部署在多台服务器上.数据库是多台服务器共用一个,这个时候程序如何保证多台服务器对共享资源的操作是正确的?比如有一本书只剩10本了,如何保证剩0本的时候就无法购买?

答:

首先这是个很棒的问题。这个问题本身其实超出了多线程的讨论范围,因为当前场景是用集群服务器来工作,多线程的讨论范围应该是在一个物理CPU内。但是这真的是一个很好的问题,我很想尝试回答一下。需要声明的是我的回答是我个人的思考,不代表什么正确答案之类的东西,仅供你参考。

一个集群需要互斥的访问共享资源,那么集群间是需要通信的。通信有一个中心节点我们称之为Master, 真正负责处理业务逻辑的节点我们称之为Slave。通常Master将资源指定给某一个Slave来处理,选取特定Slave需要使用投票算法。Hadoop就是这样一种模式。

但问题是,我们如何保证资源被正确的分配?比如10本书本正确分配给是个订单(假设每单买一本),剩余数量是0时不会继续销售。

首先看电商的处理方式,他们其实降低了难度,因为并不是实时销售的,你在电商购物时会注意到提交订单后会受到邮件说订单成功受收到,正在受理。后续他们会审批的啊,审批通过了才邮件告诉你订单受理成功正在出库。

12306也是实时销售的例子,这种场景解决方案一种是将真正减库存的地方串行化处理,如果你的峰值压力不是特大,这应该没问题,不就相当于单线程嘛。

另一种方案是加锁,在数据库表的行上加锁,可以是数据库提供的锁,也可以是业务模拟的锁(比如一个叫lock的表,插入一行记录标示摸个资源被锁定了)。需要说明的是直接用数据库提供的锁是有风险的,要么性能迅猛降低,要么搞成死锁。

二、总结

有简单的,有复杂的,稍微回忆一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注