java线程 — 创建和启动线程
创建和启动线程,传统有两种方式:
方式1:继承Thread类;
方式2:实现Runnable接口;
线程类(java.lang.Thread):Thread类和Thread的子类才能称之为线程类。阅读API
main方法就是一个主线程
方式1:继承Thread类
步骤:
1. 定义一个类A继承于java.lang.Thread类。
2. 在A类中覆盖Thread类中run方法。
3. 我们在run方法中编写需要执行的操作---->run方法里的,线程执行体
4. 在main方法(线程)中,创建线程对象,并启动线程。
创建线程类对象: A类 a = new A类();
调用线程对象的start()方法: a.start();//启动一个线程
注意:千万不要调用run方法,如果调用run方法好比是调用一个方法。依然还是只有一个线程,并没有开启新的线程。
方式2:实现Runable接口
步骤:
1. 定义一个类A实现于java.lang.Runnable接口,注意A类不是线程类。
2. 在A类中覆盖Runnable接口中的run方法。
3. 我们在run方法中编写需要执行的操作---->run方法里的,线程执行体
4. 在main方法(线程)中,创建线程对象,并启动线程。
创建线程类对象: Thread t = new Thread(new A()); Thread构造器,需要Runnable对象/Runable实现类对象
调用线程对象的start()方法: a.start();//启动一个线程
使用匿名内部类来创建和使用线程:
只适用于某一个类只使用一次的情况
getName() //获取构造器名称
使用Thread(String name) //构造器设置构造器名称(还有其他构造器也可设置构造器名称,继承方式中)
static Thread currentThread() //返回对象当前正在执行的线程对象的引用(实现方式中)
例:String name = Thread.currentThread().getName();
继承方式和实现方式的区别:
继承方式:
1. Java中类是单继承的,该类如果继承了Thread类,那么就不能再有其他的直接父类了。
2. 从操作上分析,继承方式更简单,获取线程名字也简单。
3. 从多线程共享同一个资源上分析,继承方式不能做到。
实现方式:
1. Java中类可以实现多接口,此时该类还可以继承其他类,并且还可以实现其他接口。
2. 从操作上分析,实现方式稍微复杂点,获取线程名字也比较复杂,得使用Thread.currentThread()来获取当前线程的引用。
3. 从多线程共享同一个资源上分析,实现方式可以做到。