易截截图软件、单文件、免安装、纯绿色、仅160KB

java的原子操作和volatile

原子操作
所谓原子操作,就是"不可中断的一个或一系列操作" , 在确认一个操作是原子的情况下,多线程环境里面,我们可以避免仅仅为保护这个操作 在外围加上性能昂贵的锁,甚至借助于原子操作,我们可以实现互斥锁。 关于java中的原子性
原子性可以应用于除long和double之外的所有基本类型之上的“简单操作”。对于读取和写入出long和double之外的基本类型变量这样的操作 ,可以保证它们会被当作不可分(原子)的操作来操作。 volatile
当我们定义一个变量,假设就叫o吧,理论上讲,每次使用到o的时候,都应该从o的地址来读取这个变量,但是这存在一个效率问题,就是每次 使用o的时候都要从内存中去取值,然后通过系统总线传到CPU处理,这样开销会很大。所以编译器为了优化性能,把o放进CPU的Cache中,假如 o在赋值期间没有被改变,就直接从CPU的Cache里取o的副本来进行赋值。但是"bug"也显而易见,可能o已经被一个线程改变而重新写回了内存 ,但另一个线程并不知道,依旧按照原来的计划从CPU的Cache里读o的副本来取值,结果不幸发生了。 于是编译器的开发者为了补救这一"bug",提供了一个volatile让开发人员为他们的过失埋单,或者说提供给开发人员了一个选择效率的权利。 当变量加上了volatile时,编译器就老老实实的每次都从内存中读取这个变量值,否则就还按照优化的方案从cache里读。 在两个或者更多的线程访问的成员变量上使用volatile较好,当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。


相关文档:

java入门

 Java学习从入门到精通 
一、 JDK (Java Development Kit) 
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......

理解Java类加载原理

第一部分. 提示
我需要读这篇文章吗?
Java类加载器对Java系统的运行是至关重要的,但是却常常被我们忽略。Java类加载器负载
在运行时查找和加载类。自定义类加载器可以完全改变类的加载方式,以自己喜欢的方式来
个性化你的Java虚拟机。本文简要的介绍Java类加载器,然后通过一个构造自定义类加载器
的例子来说明,这 ......

java 中 Cookie的用法

Cookie:记录用户登陆状态,可以在客户端创建cookie,可以使用户第二次登陆的时候不用输入用户名和密码,即可以登陆到主页
主要代码:  
LoginView 中: (获取cookie)
//获取cookie
Cookie [] cs=request.getCookies();
String name="";
String value="";
if(null!=cs)
......

java常见错误以及可能原因集锦

0、 需要标识符
a) 不在函数内
1、 非法表达式开始
b) 可能:丢失括号 .
2. no data found
a) 可能:setInt(1,100)中,没有100这个值
3. 找不到符号
a) 可能:没导入包
4. 指定了无效URL
a) 可能:数据库名或IP错误,即连接出错
5. 类路径没有找到
a) 可能: ClassNotFoundException: oracle.jdbc.driver.Or ......

java 鼠标画线

Line.java文件-------驱动类
import javax.swing.JFrame;
public class Line
{
   public static void main(String[] arg)
   {
       JFrame frame=new JFrame("Draw lines");
       frame.setDefaultCloseOperation(JFrame.EX ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号