- 浏览: 2310 次
- 性别:
- 来自: 成都
最新评论
-
swjtufei:
只包含static变量的class是否是线程安全的?
《java并发编程实践》读书笔记(一)- 线程安全性
文章列表
在前面章节中指出,要编写正确的并发程序,关键的问题在于对共享变量的可变状态需要正确的管理,介绍了线程如何通过同步来避免在同一时刻对共享变量进行安全的访问。
我们已经知道同步代码块或者同步方法可以确保以原子的方式执行操作,但是一种常见的错误理解是认为关键字synchronized只能用语实现原子性或者确定临界区。其实同步还有另外一个很重要的一面,就是:内存可见性,我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改对象的状态,而且希望确保当一个线程修改对象状态后,其他线程能够马上看到修改过后的状态,如果没有同步这种情况是无法实现的。
一 ...
线程安全性概述 要编写线程安全的代码,其核心在于要对其状态访问进行管理,特别是对共享的和可变的状态的访问,对象的状态是指存储在状态变量(例如实例域或静态域)中的数据,还可包括其他依赖对象的域。 “共享”意味着变量可以由多个线程同时进行访问,而“可变”是指变量的值在整个生命周期内是可变化的。 一个对象是否是线程安全的,取决于它是否是同时被线程访问,如果需要对象是线程安全的,就需要采用同步、协同的方式来对对象的可变变量进行访问,要不然会导致数据破坏或者其他非正常的结果产生。 当多个线程同时访问对象的可变变量没有作相应的同步时,有三种方式可以修复这个 ...
在什么情况下使用线程池?
1.单个任务处理的时间比较短
2.将需处理的任务的数量大
使用线程池的好处:
1.减少在创建和销毁线程上所花的时间以及系统资源的开销
2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。
线程池工作原理:
为什么要用线程池?
诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP、FTP 或 POP)、通过 JMS 队列或者可能通过轮询数 ...