Java多线程系列(4)
来源:互联网 发布:萨博软件 编辑:程序博客网 时间:2024/05/16 14:13
Runnable 的作用:将Thread的task实现分离出来。但是如果要是用Thread的方法,就必须集成Thread。(by Johnny Deng)
Volatile关键字:
Java将(除long, double) 变量的基本加载于存储定义为atomic。这就意味着变量的值在存储的时候不会有中间的状态显现,变量也不会在加载到寄存器的中途被其他线程改变。如果一个方法仅有一个存储的操作,他们他是atmoic的,如果setFinished()。
但是,Java的内存模型中,允许thread能在local memory中持有变量的值。在这种情况下,当某thread变更了变量的值是,另一个thread可能并不知道,因为它持有的是local memory的值。
处理的方法除了synchronized外,volatile关键字就保证变量只在主存储器中存储。
举例如下:
一段Java代码的字节码编译指令可以看出其中的区别:
Java代码:
public void run(){
while (!finished){
foo();
}
}
public void setFinished(){
finieshed = true;
}
private boolean finished = false;
字节码指令可能如下:
run()方法:
Begin method run
Load register r1 with memory Location oxff12345
Lable L1:
Test if register == 1
if true branch to L2
Call method foo
Branch to L1
Label L2:
End method run
setFinished()方法:
Being method setFinished
Store 1 into memory location oxff12345
End memory setFinished
如果是:
private volatile boolean finished = false;
则run()方法的逻辑应该是:
Begin method run
Label L1:
Test if memroy location oxff12345 == 1
if true branch to L2
Call method foo
Branch to L1
Label L2:
End method run
- Java多线程系列(4)
- Java多线程系列(1)
- Java多线程系列(2)
- Java多线程系列(3)
- Java多线程系列(5)
- Java多线程系列(6)
- Java多线程系列(7)
- 【Java系列】(三)Java多线程---基础
- Java多线程系列(4)--线程等待与唤醒
- Java多线程系列4(wait/notify/notifyAll)
- Java多线程干货系列—(一)Java多线程基础
- Java多线程干货系列(1):Java多线程基础
- 自学Java系列 笔记4 多线程 1
- 自学Java系列 笔记4 多线程 2
- Java系列(十四)__多线程
- java多线程系列----------- 终结任务(一)
- java多线程系列----------- 终结任务(二)
- Java系列(十四)__多线程
- Indy10在BCB6/BDS2006上的安装
- 己所欲勿施于人
- JavaMail发送邮件例子
- 做自己最好
- 向科特勒学营销之四:营销的观念
- Java多线程系列(4)
- 发现了一个学习的好方法
- 成为嵌入式程序员应知道的0x10个问题
- 手工清除灰鸽子
- 打破发200份简历,8次面试,2次成功的网络求职规律
- 对过滤器Filter的思考
- 删除sql server数据库中内容时出现的错误
- ModelSim SE简明操作指南
- 给计算机专业的同学