http://www.cnblogs.com/dolphin0520/p/3920373.html 通过上面的阅读,记录以下个人理解,仅用以后自己复习。 volatile 用途:java多线程 修饰变量 -> 可见性 1.(变更后)即时更新 2.需要时重新读取 (需要注意:不读不写不违反volati ...
分类:
其他好文 时间:
2017-02-23 21:09:31
阅读次数:
206
一、Java虚拟机的生命周期: Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。你在同一台机器上运行三个程序,就会有三个运行中的Java虚拟机。 Java虚拟机总是开始于一个main()方法,这个方法必须是公有、返 ...
分类:
其他好文 时间:
2017-02-21 19:11:19
阅读次数:
266
1. 静态成员函数的地址可以用普通函数指针存储,而普通成员函数地址需要用类成员函数指针来存储。 2. 静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针。 3.静态成员函数不可以同时声明为virtual, const, volatile函数。 4. 静态成员函数无需创建任何实例对 ...
分类:
编程语言 时间:
2017-02-16 13:53:18
阅读次数:
197
当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。 要解决这个问题,只需要像在本程序中的这样,把该变量声明为volatile( ...
分类:
编程语言 时间:
2017-02-15 16:31:25
阅读次数:
183
transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下。 transient transient是类型修饰符,只能用来修饰字段。在对象序列化的过程中,标记为transient的变量不会被序列化。示例: class Test { ...
分类:
其他好文 时间:
2017-02-14 17:52:41
阅读次数:
170
前言 首先,我们使用多线程的目的在于提高程序的效率,但是如果使用不当,不仅不能提高效率,反而会使程序的性能更低,因为多线程涉及到线程之间的调度、CPU上下文的切换以及包括线程的创建、销毁和同步等等,开销比单线程大,因此需谨慎使用多线程。 在jdk1.5以后,提供了一个强大的java.util.cur ...
分类:
其他好文 时间:
2017-02-13 08:39:25
阅读次数:
146
理解volatile 平时工作中对于多线程的应用并不太多,但是不能说工作中不应用就可以对此不去了解,至少要做的知道有这么个东西,主要是作什么的,这样有助于看其它人写的代码。提到这个volatile,一般都会想到并发,同步,锁之类,但要想搞清楚需要看看下面一些知识。 处理器,高速缓存,主内存之间的关系 ...
分类:
其他好文 时间:
2017-02-12 18:33:47
阅读次数:
219
首先创建一个MyThread类,继承Thread,有一个成员变量flag,重写run方法: 然后,创建Run类,如下: 运行结果如下: 可以看到,程序的运行结果出现了死循环,另一个线程修改了flag的值为false之后,并没有跳出循环,这是因为在执行代码thread.start()启动这个线程时,变 ...
分类:
其他好文 时间:
2017-02-12 13:28:51
阅读次数:
171
static 和final static 静态修饰关键字,可以修饰 变量,程序块,类的方法; 当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存; 3.1.适用范围: 3.1.2.两者范围的交集,所以只能修饰:成员变量、方法、内部 ...
分类:
编程语言 时间:
2017-02-11 12:49:45
阅读次数:
175
java 使用volatile实现线程数据的共享 直接上代码看效果: 效果如下: 如果不加volatile while循环不会停止,因为即使在主线程中setRunning(false) 在子线程中isRunning仍然是true。 在java中,子线程的执行的时候会在内存中划出一个区域,特意把子线程 ...
分类:
编程语言 时间:
2017-02-09 23:57:12
阅读次数:
462