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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhkqy 中级黑马   /  2013-12-10 20:03  /  1532 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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多遍,都可以,难道是我的电脑内存大???

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

2 个回复

倒序浏览
你这里有实现共享吗?
共享就是说只有一个数据,多个线程来操作这一个数据。比如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次?

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
之所以出现这种情况是因为你只创建了一个MyThread 对象

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

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马