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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 权跃杰 中级黑马   /  2012-8-8 18:43  /  1920 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  Ticket extends Thread implements Runnable
{
        private int ticket=100;
        public Ticket(String name)
        {
                super(name);
        }
        public void run()
        {
                while(true)
                {
                        if(ticket>0)
                        {
                                System.out.println(Thread.currentThread().getName()+"----sale--"+ ticket--);//这里我想显示我定义的线程名称的信息,该怎么修改
                        }
                       
                }
        }
}
class  TicketDemo
{
        public static void main(String[] args)
        {
                Ticket t=new Ticket("one");//创建多个线程怎么给线程分别弄名字
                Thread f=new Thread(t);
                Thread f1=new Thread(t);
                Thread f2=new Thread(t);
                Thread f3=new Thread(t);
                f.start();
                f1.start();
                f2.start();
                f3.start();

        }
}

6 个回复

倒序浏览
class  Ticket extends Thread
{
        private int ticket=100;
       public Ticket(String name)
        {
                super(name);
        }
        public void run()
        {
                while(true)
                {
                        if(ticket>0)
                        {
                                System.out.println(Thread.currentThread().getName()+"----sale--"+ ticket--);//获取当前的线程名称
                        }

                }
        }
}
class  TicketA
{
        public static void main(String[] args)
        {
             Ticket t1=new Ticket("ont");
              Ticket t2=new Ticket("two");
              Ticket t3=new Ticket("three");
              Ticket t4=new Ticket("four");
               t1.start();
               t2.start();
               t3.start();
               t4.start();

        }
}


楼主写的代码有些凌乱,这是我修改后的。你可能对Thread和Runnable 还不太了解。以下是毕老师讲课时的一些总结!!!!!!!
一下是Thread和Runnable的区别和联系:
创建线程的第一种方式:继承Thread类。
步骤:
1,定义类继承Thread。
2,复写Thread类中的run方法。
        目的:将自定义代码存储在run方法。让线程运行。

3,调用线程的start方法,
        该方法两个作用:启动线程,调用run方法。
创建线程的第二种方式:实现Runable接口
步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。
    将线程要运行的代码存放在该run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
    为什么要将Runnable接口的子类对象传递给Thread的构造函数。
     因为,自定义的run方法所属的对象是Runnable接口的子类对象。
     所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
实现方式和继承方式有什么区别呢?
实现方式好处:避免了单继承的局限性。
在定义线程时,建立使用实现方式。
两种方式区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。
希望对你有所帮助!!!!!{:soso_e100:}

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
继承中就是你回答的代码,我想问下实现接口中没有办法给多个线程取名字吗??
回复 使用道具 举报
权跃杰 发表于 2012-8-8 19:34
继承中就是你回答的代码,我想问下实现接口中没有办法给多个线程取名字吗?? ...

你可以使用Thread类的另一个构造函数: public Thread(Runnable target,  String name)  java API里面有。
其中第二个参数就是为自定义的线程起名字的。
回复 使用道具 举报
本帖最后由 牛杨 于 2012-8-9 01:01 编辑
权跃杰 发表于 2012-8-8 19:34
继承中就是你回答的代码,我想问下实现接口中没有办法给多个线程取名字吗?? ...

你可以使用Thread类的另一个构造函数: public Thread(Runnable target,  String name)  java API里面有。
其中第二个参数就是为自定义的线程起名字的。

有什么需求 先 看看java API 就好了 ,基本上就都能解决了
回复 使用道具 举报
通过继承Thread创建线程跟实现Runnable接口来创建线程给线程起名字还是有区别的,
若是继承Thread类,因为Thread类有构造函数是可以传递String参数作为其线程名称的,
所有子类可以用父类已经定义好的构造函数给线程初始化名称。
实现Runnable接口是有点区别的,以下使用代码做的一个举例,希望对你有帮助。
class ThreadTest
{
        public static void main(String[] args)
        {
                Pan p1=new Pan("线程1");//继承Thread方法给线程初始化名字
                Pan p2=new Pan("线程2");//你如果想修改线程名称,通过setName()方法就可以修改
                p1.setName("将p1线程改了名字");
                p1.start();
                p2.start();       
                Xing x1=new Xing();
                Xing x2=new Xing();
                Thread t1=new Thread(x1,"一号线程");//实现Runnable接口给线程初始化名字
                Thread t2=new Thread(x2,"二号线程");
                t1.setName("将一号改名字");
                t1.start();
                t2.start();               
        }
}
class Pan extends Thread  
{
        Pan(String name)
        {
                super(name); //这里若不写构造函数,则线程用的是默认的名字。
        }
        public void run()
        {
                for (int x=0;x<100 ;x++ )
                {
                        System.out.println(Thread.currentThread().getName()+"....."+x);//获取线程名称
                }
        }
}
class Xing implements Runnable
{
        public void run()  
        {
                for (int x=0;x<100 ;x++ )
                {
                        System.out.println(Thread.currentThread().getName()+"....."+x);//获取线程名称
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
其实要实现楼主的想法很简单,就差一个覆盖Thread的一个构造函数。
class  Ticket implements Runnable
{
        private int ticket=100;
        public void run()
        {
                while(true)
                {
                        if(ticket>0)
                        {
                                System.out.println(Thread.currentThread().getName()+"----sale--"+ ticket--);//这里我想显示我定义的线程名称的信息,该怎么修改
                        }
                        
                }
        }
}
class SubThread extends Thread
{
        SubThread(Runnable target,String name)//这个构造函数可查API,一般传一个Runnable子类对象的时候比较多,其实还可以在这里定义线程的名称
        {
                super(target,name);
               
        }
}
class  TicketDemo
{
        public static void main(String[] args)
        {
                Ticket t=new Ticket();//创建多个线程怎么给线程分别弄名字
                Thread f=new SubThread(t,"线程f");
                Thread f1=new SubThread(t,"线程f1");
                Thread f2=new SubThread(t,"线程f2");
                Thread f3=new SubThread(t,"线程f3");
                f.start();
                f1.start();
                f2.start();
                f3.start();

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