用Thread类创建线程
1 要将一段代码在一个新的线程上运行,该代码应该在一个类的run函数中,并且run函数所在的类是
Thread类的子类。倒过来看:我们要实现多线程,必须编写一个继承了Thread类的子类,子类覆盖了
Thread的run()函数,在子类的函数中调用想在新线程上运行的程序代码。
2 启动一个新的线程我们不是直接调用Thread的子类的run()方法,而是调用Thread子类对象的start方
法,start()方法将产生一个新的线程,并在该线程上运行该Thread类对象中的run()方法,根据面向对象
的运行时的多态性,在该线程上实际运行的是Thread子类对象的run()方法。
3由于线程的代码段在run方法中,那么该方法执行完成以后线程也就相应的结束了,因而我们可以通过
控制run方法中的循环条件来控制线程的结束。
使用Runnable 接口创建多线程
1 适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程) 同程序的代码,数据有效分
离,较好的体现了面向对象的设计思想。
2 可以避免由于java的单继承特性带来的局限。我们将已经继承了一个类的子类放入多线程,由于不能
有两个父类,就不能继承Thread,那么这个类就只能实现Runnable接口。
3 当线程被构造时,需要的代码和数据通过一个对象作为 构造函数的实参传递进去,这个对象就是实现
了Runnable接口的类的实例。
4 事实上,几乎所有的多线程应用都可用Runnable接口方式。 |