Java中实现多线程有两种手段:
- 继承Thread类(此类为多线程的操作类),而且必须明确地重写Thread类中的
run()
方法,此方法为线程的主题 - 实现Runnable接口
Thread类和Runable的区别:
- Thread不适合多个线程共享资源,而实现了Runable接口,就可以方便地实现资源的共享
- Thread类其实也是Runnable接口的子类,Thread类中的
run()
方法其实由Runnable子类完成的,这就是为什么继承Thread类必须明确地重写Thread类中的run()
方法(这里其实用到了代理模式)
Thread类:
- 如果一个类通过继承Thread类来实现,那么只能调用一次
start()
方法,如果调用多次,则会抛出IllegalThreadStateException
异常。 start()
方法里真正调用的是start0()
方法,此方法在声明处使用了native关键字声明,此关键字表示调用本机的操作系统函数,因此多线程的实现需要依靠底层操作系统支持。
Runnable接口:
- 实现Runnable接口必须重写Runnable中的
run()
方法 - 线程的启动还是要依靠Thread类,需要使用Thread构造方法
public Thread(Runable target)
或者public Thread(Runnable target,String name)
实例化Thread类对象后调用对象的start()
方法来启动线程。