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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王文辉 中级黑马   /  2015-7-21 14:43  /  2455 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


java中创建线程有两种方式:继承Thread类和实现Runnable接口。
        1,继承Thread类
                步骤:
                a,定义类继承Thread类。
                b,覆盖Thread类中的run方法,将需要被多线程执行的代码定义到该run方法当中。
                c,建立Thread类的子类创建线程对象。
                d,调用start方法,开启线程并调用该线程的run方法。
        下面有个示例来让你直观的了解怎么用继承Thread类的方式来创建线程。
        /*
        * 示例:创建三个线程,每过2秒打印一下线程的名称,打印三次
        */
        public class Thread1 extends Thread{
                private final int MAX = 3;//最大打印次数
                private int COUNT = 1;//计数
                private final int TIME = 2;//间隔时间
       
                //接收线程名称
                public Thread1(String name) {
                        super(name);
                }
                //覆盖run方法,在里面写我们要执行的代码
                public void run() {
                        while(COUNT<= MAX){
                                System.out.println(this.getName());
                                COUNT++;
                                //每次打印后,在一段时间后再打印
                                try {
                                        Thread.sleep(TIME*1000);
                                } catch (InterruptedException e) {
                                        e.printStackTrace();
                                }
                        }
                }
                public static void main(String[] args) {
                        Thread1 t1 = new Thread1("线程1");//创建线程
                        Thread1 t2 = new Thread1("线程2");
                        Thread1 t3 = new Thread1("线程3");
                        t1.start(); //开启线程
                        t2.start();
                        t3.start();
                        //也可以使用下面这种方式书写
                        //new Thread1("线程4").start();
                }
        }
下图是执行结果:观察可知,多线程的执行是随机交替执行的,每次运行的结果都可能不同。

       
        看到这里,有些朋友可能会有疑问:为什么要继承Thread?为什么要覆盖run方法?
        其实直接建立Thread类对象即可。并开启线程执行就可以了。但是虽然线程执行了,可是执行的代码是该线程默认的代码,该代码就存放在run方法中。我们定义线程的目的是为了执行自定义的代码,实现自己想要的功能,而线程运行代码都存储在run方法中,所以只有覆盖了run方法,才可以运行自定义的内容,想要覆盖,必须先要继承。
        主线程运行的代码都在main函数中,自定义线程运行的代码都在run方法中。
       


7 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
赞赞
回复 使用道具 举报
学习了!!!!!
回复 使用道具 举报
感觉继承Thread用不习惯,我都是实现接口
回复 使用道具 举报
顶一个,加油吧
回复 使用道具 举报
rxtm 发表于 2015-7-22 20:10
感觉继承Thread用不习惯,我都是实现接口

对的,一般都是使用实现接口的方式
回复 使用道具 举报
写得很详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马