黑马程序员技术交流社区

标题: 求教:实现Runnable的线程为什么不能实现共享成员变量 [打印本页]

作者: 一个好人    时间: 2015-4-17 23:25
标题: 求教:实现Runnable的线程为什么不能实现共享成员变量
本帖最后由 一个好人 于 2015-4-19 17:42 编辑

public class RunnableDemo implements Runnable
{
        private int a;

        @Override
        public void run()
        {
                for (; a < 9; a++)
                {
                        System.out.println(Thread.currentThread().getName() + " " +a );
                }

        }

        public static void main(String[] args)
        {
                for (int i = 0; i < 9; i++)
                {
                        System.out.println(Thread.currentThread().getName() + " " + i);
                        if (i == 4)
                        {
                                RunnableDemo runnable = new RunnableDemo();
                                new Thread(runnable,"新线程1:").start();
                                new Thread(runnable,"新线程2:").start();
                        }
                }
        }
}
结果是
main 0
main 1
main 2
main 3
main 4
main 5
新线程1: 0
main 6
新线程1: 1
新线程2: 1
main 7
新线程2: 3
新线程1: 2
新线程1: 5
新线程2: 4
main 8
新线程2: 7
新线程1: 6
新线程2: 8
------------------------------------------------------------------------------------------
以上过程并不能表示实现了runnable接口  线程间就能共享成员变量(很多书上写的都是实现这个接口就能共享成员变量),求高手解答 我很久没弄出来了,谢谢
作者: 谷歌    时间: 2015-4-18 00:48
没上同步锁吧
作者: 一个好人    时间: 2015-4-18 08:33
继续求大牛解答
作者: Searching    时间: 2015-4-18 08:44
已经实现了呀,你看线程2的数是不连续的,证明和线程1共享了数据,只是你没加同步锁,所以数据有问题。
作者: 一个好人    时间: 2015-4-18 08:49
Searching 发表于 2015-4-18 08:44
已经实现了呀,你看线程2的数是不连续的,证明和线程1共享了数据,只是你没加同步锁,所以数据有问题。 ...

我认为的数据共享是 比如 线程1 i=1线程 2 i=2线程1 i=3 线程 2 i=4,,,,,,,,就是说i的值是顺序递增的,
可能是我没加数据的同步锁的原因 我再试试




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2