![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java&Thread
jj_chen_lian
这个作者很懒,什么都没留下…
展开
-
java Thread(3)
接着再来看一下竞争条件,先学习一下主要的不安全的线程,形成一定的思维,以后看程序就能判断该段代码是否是线程安全。记录一下自己今天所学的,方便自己以后查阅。竞争条件:当计算的正确行依赖于运行中相关的时序或者多线程的交替时,会产生竞争条件。这句话的意思是当前变量的状态会随着时间的转移或者线程之间的调度而发生了改变,最常见的一种竞争条件是“检查再运行”,比如你观察一些事情为真的(文件不存在),然后(原创 2012-04-11 14:08:32 · 431 阅读 · 0 评论 -
Thread(5)
接着就是学习一下这个锁,首先我们前面说过用线程安全类就可以保持线程安全,但是我们前面强调了一点,就是只能使用唯一的线程安全类。如果在一个线程安全的类中使用是个安全的状态变量会出现什么的情况呢?想象一个情形,我们缓存最新的计算结果,以对应两个连续的客户请求相同的数字进行因数分解,希望由此提高Servlet的性能(这未必是一个有效的缓存策略。要实现这个策略,我们需要记住两件事,最新请求的数字和它的原创 2012-04-11 15:50:10 · 696 阅读 · 0 评论 -
java Thread(2)
接着上面的例子,来看看这个例子:@NotThreadsafepublic class UnsafeCountingFactorizer implements Servlet{ private long count = 0; public long getCount(){return count;} public void service(ServletRequ原创 2012-04-11 13:49:37 · 383 阅读 · 0 评论 -
java Thread(1)
首先来看一个线程安全的例子,一个无状态的servlet$ThreadSafepublic class StatelessFactorizer implements Servlet{ public void service(ServletRequest req,ServletResponse resp){ BigInteger i = extractFrom原创 2012-04-11 13:34:52 · 536 阅读 · 0 评论 -
Thread(4)
复合操作:对于前面的LazyInitRace和UnsafeCountingFactorizer都包含了一系列的操作,相对于同一个状态下的其他操作而言,必须是原子性的和不可分割的。这句话怎么理解呢?就是说如果当前有一个线程在处理某个状态时,不准许其他线程对当前的状态进行操作。为了避免竞争条件,我们必须阻止其他线程访问我们正在修改的变量,让我们可以确保:当其他线程想要查看或修改一个状态时,必须在我原创 2012-04-11 14:29:15 · 605 阅读 · 0 评论