线程的两种实现方式:
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
|
|