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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗广伟 中级黑马   /  2013-7-30 18:28  /  1482 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-31 23:15 编辑

复制代码
局部变量不是共享数据,那么多线程中什么数据才是共享数据?成员变量?还是其他的吗?

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3 赞一个!

查看全部评分

6 个回复

正序浏览
罗广伟 发表于 2013-7-30 22:07
那局部变量x不能被多个线程同时操作的原因是什么呢?是生命周期还是因为操作的线程会持有一个什么引用? ...

不是生命周期的问题,它作用域只限于 run() 中。当你创建了一个线程以后,它只在单个的线程内部起作用。
你可以在main中设置一个变量 x ,让你创建的线程对它操作(比如自减之类的……),这时 x 就是共享数据,你也可以称 x 是main()中的局部变量。
回复 使用道具 举报
可以被多个线程同时操作的数据叫做共享数据。所以说只要是被多个线程一起操作的变量都可以算是共享数据,局部变量在局部假使能被多个线程同时操作,那也算是共享数据。

线程安全问题产生的原因:
1,多个线程在操作共享的数据。
2,操作共享数据的线程代码有多条。
当一个线程在执行操作共享数据的多条代码过程中,其他线程参与了运算。
就会导致线程安全问题的产生。

评分

参与人数 1技术分 +1 收起 理由
夜默 + 1

查看全部评分

回复 使用道具 举报
花心々小土豆 发表于 2013-7-30 21:21
看了这问题我茫然了……
可以被多个线程同时操作的数据叫做共享数据,也可以叫它共享资源。它不一定就得是 ...

那局部变量x不能被多个线程同时操作的原因是什么呢?是生命周期还是因为操作的线程会持有一个什么引用?
回复 使用道具 举报
花心々小土豆 发表于 2013-7-30 21:21
看了这问题我茫然了……
可以被多个线程同时操作的数据叫做共享数据,也可以叫它共享资源。它不一定就得是 ...

那局部变量x不能被多个线程同时操作的原因是什么呢?是生命周期还是因为操作的线程会持有一个什么引用?
回复 使用道具 举报
看了这问题我茫然了……
可以被多个线程同时操作的数据叫做共享数据,也可以叫它共享资源。它不一定就得是变量,你上次问的那个里面 x 就是局部变量,不能多个线程同时操作,不是共享资源。
假如多个线程对集合里的元素进行取出操作,每个线程在取之前先要判断集合里是不是有元素,有就取出,没有不进行取操作。这时集合里的元素就是共享资源。安全问题:当集合里只有一个元素时,来了一个线程,做判断以后发现有元素,准备取元素,但这时它停下来了,CPU去执行其他进程,下一个线程来做判断时发现有元素,也准备取,假如好几个线程都到这了,只有一个元素,这时就会出错。就像火车票售票的例子,会出现负数的票一样。
多线程里还有几个概念,并发、并行、死锁等。为什么每次运行代码的时候出现的结果都不唯一…………
回复 使用道具 举报
多个线程操作同一个数据,比如有一堆煤,一个线程在取煤,另一个线程在为这堆煤上添加煤。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马