A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wnmmp 中级黑马   /  2014-8-9 23:19  /  3024 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多个线程运行同一代码块容易产生安全问题,因为数据是共享的,一个线程在此代码块未执行完毕,CPU便切换到其他线程,那CPU是不是至少执行完当前的这句代码再切换吧?也就是一个线程最小执行单元是一句代码否?

8 个回复

倒序浏览
是的,一句代码是不会分开执行的
回复 使用道具 举报
1345523981 发表于 2014-8-9 23:20
是的,一句代码是不会分开执行的

错了,应该是一行,有些函数里面的参数就有好多行代码, 比如
new Thread(new Runnable(){
....;
....;
....;
});
回复 使用道具 举报
wnmmp 发表于 2014-8-9 23:24
错了,应该是一行,有些函数里面的参数就有好多行代码, 比如
new Thread(new Runnable(){
....;

弱弱的问一句,一行跟一句有什么区别?
回复 使用道具 举报
1345523981 发表于 2014-8-9 23:20
是的,一句代码是不会分开执行的

一句可以这样
System.
out.print(1);
回复 使用道具 举报
1345523981 发表于 2014-8-9 23:26
弱弱的问一句,一行跟一句有什么区别?

额。。应该是我钻牛角尖了:#
回复 使用道具 举报
不一定。准确来说,应该是一条机器指令。一行代码可能包含多条指令。比如i++; 就包含3条指令。java编程思想中提出一个观点:除非你能写出一个在主流cpu架构上运行的高效率的JVM,否则不要假定自己能分清什么是原子操作(也就是你说的最小执行单元),对多个线程共享的资源一般都要加上同步锁

点评

操作系统原理  发表于 2014-8-10 00:32
回复 使用道具 举报 1 0
wnmmp 中级黑马 2014-8-10 00:28:34
8#
fantacyleo 发表于 2014-8-9 23:46
不一定。准确来说,应该是一条机器指令。一行代码可能包含多条指令。比如i++; 就包含3条指令。java编程思想 ...

大牛啊,说得好专业,原来叫原子操作!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马