线程也是一种对象,并不是什么对象都能成为线程的,只有那些继承了Runnable接口的类的对象才能成为线程对象。因此,实现线程的对象的方法就有两种,其一是继承Tread类(Tread类已经实现了Runnable接口),另一种就是直接实现Runnable接口。
线程的创建方式:
1、Thread类
Tread类常用的方法包括start()、interrupt()、join()、run()方法等。start()方法用于启动线程,而run()方法为线程的执行代码。
Tread的常用构造函数有四个:
Thread thread=new Thread();
Thread thread=new Thread(Runnabl simple);
Thread thread=new Thread(“Thread name”);
Thread thread=new Thread(Runnabl simple,“Thread name”);
Simple 是实现了Runnable 接口的类实例化对象
1.1 继承Thread类
这个类实现了Runnable接口,Tread类具有创建和运行线程的必要框架,使用start()方法启动线程。启动线程后,将该线程对象放在可运行线程队列里面,等待被虚拟机调用。
public class Simple extends Thread{
....省略的代码
public void run(){ //定义自己的run()函数。
...
}
2、Runnable接口
Runnable接口只有一个run()方法,实现了该接口的类的对象才能成为线程对象。
用这个借口实现线程类对象有一个好处,就是该类在实现了线程的基础上还能继承其他的类。因为在Java中,一个类只能有一个父类。所以,如果,该类用了Thread类做父类,那么就不能再继承其它类了。而用Runnable就不会有这种情况。
public class Simple implements Runnable{
...
public void run(){
.....
}
}
线程启动代码:
Simple sim=new Simple(); //实现了接口的类的实例化对象
Thread thread=new Thread(sim); //以上述对象为参数实例化Thread对象。
thread.start(); //启动线程
注意:
如果是以Runnable接口实现线程类对象的话:
1) 那么使用方法getName()获取线程的名称的时候,就需要使用下面的代码:
Tread.currentThread().getName();
2)调用sleep()方法的时候呢:
Tread.currentThread().sleep(int);