java runnable共享的内容是什么?

iamzhoug37 2014-08-11 05:59:27
我提一个比较蠢的问题, 就是runnable对象能实现资源共享, 但是这个资源共享包不包括局部变量呢?
我自己实验了一下,
class RunnableTest implements Runnable
{
int g ;
public void run()
{
for(int i=0 ; i<100 ; i++,g++)
{
System.out.println(Thread.currentThread().getName() + "------i " + i + " ------g " + g) ;
}
}
}


public class javatest
{
public static void main(String args[])
{
RunnableTest r = new RunnableTest() ;
Thread t1 = new ThreadTest("线程一" , r) ;
Thread t2 = new ThreadTest("线程二" , r) ;
t1.start() ;
t2.start() ;
}
}

运行的结果如下:

从这儿我猜的runnable对象共享的内容仅限于成员变量, 而不包括局部变量. 不知道这么想的对不对呀?
还有一个问题, 为什么g为0的情况输出了两次?runnable不是可以共享成员变量吗?
...全文
185 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rumlee 2014-08-12
  • 打赏
  • 举报
回复
引用 7 楼 u013536983 的回复:
[quote=引用 6 楼 rumlee 的回复:] runnable接口与java的其它接口没有任何的不同,就是一个普通接口而已。run方法也只是一个普通的方法。 与其他方法有所不同的是Thread类的start方法,真正启动线程的就是在Thread的start方法中。
thread的start()会启动runnable的run(), 说不出来了, 哎, 算了, 等我想明白再说吧[/quote] Thread的start会启动一个线程,并在新的线程中执行run
iamzhoug37 2014-08-12
  • 打赏
  • 举报
回复
谢谢大家, 很打扰大家了
iamzhoug37 2014-08-12
  • 打赏
  • 举报
回复
引用 6 楼 rumlee 的回复:
runnable接口与java的其它接口没有任何的不同,就是一个普通接口而已。run方法也只是一个普通的方法。 与其他方法有所不同的是Thread类的start方法,真正启动线程的就是在Thread的start方法中。
thread的start()会启动runnable的run(), 说不出来了, 哎, 算了, 等我想明白再说吧
rumlee 2014-08-12
  • 打赏
  • 举报
回复
引用 5 楼 u013536983 的回复:
[quote=引用 3 楼 rumlee 的回复:] 变量的作用域问题都没有弄清楚,那怎么能够理解并发呢,先还是从最基本的入手吧。
引用 2 楼 yankaiwuzhengbo 的回复:
正解,第二个问题是并发,第一个问题建议多看看变量的作用域这一块儿
变量的作用域我是真的明白的啊, 我只是没搞懂runnable的run函数, 我以为这个run()函数是独一无二的, 一旦两个线程使用的是同一个runnable变量, run()运行起来之后两个线程使用的是同一个run() , 那么就可以共享这个runnable的所有东西,........ 哎, 也许还是不明白作用于问题吧. 但是我还是想知道一下, 第二个是怎么回事?还是希望大家能给我讲讲, 非常感谢了[/quote] runnable接口与java的其它接口没有任何的不同,就是一个普通接口而已。run方法也只是一个普通的方法。 与其他方法有所不同的是Thread类的start方法,真正启动线程的就是在Thread的start方法中。
iamzhoug37 2014-08-11
  • 打赏
  • 举报
回复
引用 3 楼 rumlee 的回复:
变量的作用域问题都没有弄清楚,那怎么能够理解并发呢,先还是从最基本的入手吧。
引用 2 楼 yankaiwuzhengbo 的回复:
正解,第二个问题是并发,第一个问题建议多看看变量的作用域这一块儿
变量的作用域我是真的明白的啊, 我只是没搞懂runnable的run函数, 我以为这个run()函数是独一无二的, 一旦两个线程使用的是同一个runnable变量, run()运行起来之后两个线程使用的是同一个run() , 那么就可以共享这个runnable的所有东西,........ 哎, 也许还是不明白作用于问题吧. 但是我还是想知道一下, 第二个是怎么回事?还是希望大家能给我讲讲, 非常感谢了
iamzhoug37 2014-08-11
  • 打赏
  • 举报
回复
引用 3 楼 rumlee 的回复:
变量的作用域问题都没有弄清楚,那怎么能够理解并发呢,先还是从最基本的入手吧。
引用 2 楼 yankaiwuzhengbo 的回复:
正解,第二个问题是并发,第一个问题建议多看看变量的作用域这一块儿
变量的作用域我是真的明白的啊, 我只是没搞懂runnable的run函数, 我以为这个run()函数是独一无二的, 一旦两个线程使用的是同一个runnable变量, run()运行起来之后两个线程使用的是同一个run() , 那么就可以共享这个runnable的所有东西,........ 哎, 也许还是不明白作用于问题吧. 但是我还是想知道一下, 第二个是怎么回事?还是希望大家能给我讲讲, 非常感谢了
rumlee 2014-08-11
  • 打赏
  • 举报
回复
变量的作用域问题都没有弄清楚,那怎么能够理解并发呢,先还是从最基本的入手吧。
yuhouqingchen_2648 2014-08-11
  • 打赏
  • 举报
回复
引用 1 楼 ldh911 的回复:
局部变量之所以叫做局部,就是因为它真的很局部。该函数中的局部变量的每次函数调用中都是独一无二的,无论是单线程还是多线程。 你的第二个问题是并发问题,这个就命题较大,涉及并发访问、可见性等问题。
正解,第二个问题是并发,第一个问题建议多看看变量的作用域这一块儿
MiceRice 2014-08-11
  • 打赏
  • 举报
回复
局部变量之所以叫做局部,就是因为它真的很局部。该函数中的局部变量的每次函数调用中都是独一无二的,无论是单线程还是多线程。 你的第二个问题是并发问题,这个就命题较大,涉及并发访问、可见性等问题。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧