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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王_强 中级黑马   /  2013-3-25 15:00  /  1736 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 贾文泽 于 2013-3-27 00:45 编辑

class Ticket implements Runnable{
        
        //static 静态变量
   private  int tick=100;
        public void run(){
                while(true){
                        if(tick>0)
                        System.out.println(Thread.currentThread()+"sale:"+tick--);
                }
        }
}


public class TicketTest {

        /**
         * 简单的卖票程序
         * 多线程卖票
         */
        public static void main(String[] args) {
                //每创建一个线程,都会创建一个线程独立空间
                Ticket t=new Ticket();

                Thread t1=new Thread(t);//创建一个线程
                Thread t2=new Thread(t);//创建一个线程
                Thread t3=new Thread(t);//创建一个线程
                Thread t4=new Thread(t);//创建一个线程
                //怎么让这个对象和线程有关联呢?
                t1.start();
                t2.start();
                t3.start();
                t4.start();
               
               
        }

}

请问下,实现接口的方式,是不是t1,t2,t3,t4四个线程共享代码,但是要是继承的话,是不是t1,t2,t3,t4四个线程都有自己独立的代码空间?



点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-26 22:53

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
简单的说就一句话:extends Thread类的不能共享成员变量,而implements Runnable接口的共享实例变量。
回复 使用道具 举报
一般情况下推荐使用实现mplements Runnable接口的 因为它有以下好处
1.更适合多个线程,处理相同数据的情况。
2.避免了java 的单继承带来的局限性。
3.实现数据跟代码的分离,增强代码的健壮性。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
t1,t2,t3,t4四个线程都有自己独立的代码空间,用操作系统来解释就是,没有让它们在同一个临界区

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
支持蔡兄
回复 使用道具 举报
如果是implements Runnable 是共享成员变量的,但是一定要注意一点的是,被共享的资源一定要加锁!!否则程序在运行时期会出现问题。
如果是extends Thread 则是单独使用自己的空间。
这两种方法没有好与不好,要看需求而定。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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