黑马程序员技术交流社区

标题: 继承了Thread类以后,资源不能共享吗? [打印本页]

作者: zhkqy    时间: 2013-12-10 20:03
标题: 继承了Thread类以后,资源不能共享吗?
ThreadRunnable的区别
网上都说继承了Thread以后不能实现资源的共享我怎就搞不明白呢
如果用下面的方面做的话:
package test;
class MyThread extends Thread{
        private int n = 10;
        public void run(){
                while(n > 0){
                        System.out.println(Thread.currentThread().getName()+"--->"+this.n --);
                }
        }
}
public class TestThread {
        public static void main(String[] args) {
                MyThread mt = new MyThread();
                new Thread(mt).start();
                new Thread(mt).start();
        }
}
运行的结果是:
Thread-2--->3
Thread-2--->2
Thread-2--->1
Thread-1--->6
....
为什么说资源不能共享呢????
我试了N多遍,都可以,难道是我的电脑内存大???


作者: 衣带赞    时间: 2013-12-10 20:14
你这里有实现共享吗?
共享就是说只有一个数据,多个线程来操作这一个数据。比如10张车票,2个窗口卖,你能每个窗口卖10张票出去吗?只能加起来卖10张才对。
Thread-2--->3
Thread-2--->2
Thread-2--->1
Thread-1--->6
你这个运行结果,n都变成1了,结果n又来个6,你这叫共享吗?共享就是无论哪个线程执行,都执行到1结束,总共打印10行。
如果你这是车票,每个票给你卖2次了,如果3个线程,不是要卖3次?
作者: 四五六七八    时间: 2013-12-10 20:27
之所以出现这种情况是因为你只创建了一个MyThread 对象

MyThread my1 = new MyThread();
MyThread my2 = new MyThread();     //这里创建了两个MyThread对象   资源肯定不能共享了,
                my1.start();
                my2.start();




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