我提一个比较蠢的问题, 就是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不是可以共享成员变量吗?
------解决方案--------------------
局部变量之所以叫做局部,就是因为它真的很局部。该函数中的局部变量的每次函数调用中都是独一无二的,无论是单线程还是多线程。
你的第二个问题是并发问题,这个就命题较大,涉及并发访问、可见性等问题。
------解决方案--------------------
正解,第二个问题是并发,第一个问题建议多看看变量的作用域这一块儿
------解决方案--------------------
变量的作用域问题都没有弄清楚,那怎么能够理解并发呢,先还是从最基本的入手吧。