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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 叶子和大人 中级黑马   /  2015-10-29 21:57  /  318 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

线程的两种实现方式:
                1.继承Thread类  复写run方法  建立对象  调用strart方法(因为是Thread的子类,调用start就会调用run中存储的线程要运行的代码,即线程要运行的代码是存储在run中。开启线程);
注:不能一个线程start好几次,这样没有意义,提示线程状态异常。已经开启的线程没必要再开启。
        以上的线程方法在多个线程操作一个资源对象的时候容易出错,每个线程都会产生一个新的资源。
                2.实现Runnable接口作为线程的目标对象(线程体),创建一个实现Runnable接口的子类的对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象来start线程体。
                注:将线程要运行的代码存入在Runnable接口的子类对象的run方法中,
                        为什么要将Runnable接口的子类对象传给Thread构造函数?
                                因为自定义的 run方法所属的对象是runnable接口的子类对象
所以要让线程去执行指定的对象的run方法就要必须明确run方法的所属对象


        两种方式的区别:

                实现方式和继承方式有什么不同?、
                        实现方式可以突破继承的局限性,继承只能为单继承,接口可以多实现。
                        建议使用Runnable方式。
                        继承Thread:线程代码存在Thread子类中
                        实现Runnable:线程代码存在接口的子类中

currentThread() 获取当前线程对象 方法为静态的
getName();获取线程的名称
void setName(String name)设置线程名称
sleep方法会抛出异常  要处理。但是接口没有抛异常,所以只能用try()chath

1 个回复

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