黑马程序员——java多线程的两种实现方式

来源:互联网 发布:国泰君安富易软件 编辑:程序博客网 时间:2024/04/27 14:23

 线程是进程的中的一个独立的控制单元,一个进程可以有多个线程,合理的线程数是能够提高程序的运行效率的。在Java中有两种实现多线程的方式,一是直接继承Thread类,二是实现Runnable接口。下面以简单的龟兔赛跑问题来分别演示这两种多线程实现的具体步骤。

一、直接继承Thread类的多线程实现步骤

1.定义类继承Thread;

2.复写Thread类中run方法;

3.调用线程的start方法;

class rabitRun extends Thread{     //继承Thread//重写run方法public void run(){for(int i=0;i<=300;i++){System.out.println("兔子跑了"+i+"步");}}}public class threadDemo {public static void main(String[] args) {rabitRun rabit=new rabitRun();//调用start启动线程rabit.start();for(int i=0;i<=200;i++){System.out.println("乌龟跑了"+i+"步");}}}


注意:直接调用run()方法并不会启动一个新线程,它和调用一个普通的java方法没有什么区别。

二、实现Runnable接口的多线程实现步骤

1.定义类实现Runnable接口;

2.覆盖Runnable接口中的run方法;

3.通过Thread类建立线程对象;

4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数;

5.调用Thread了的start方法开启线程;

class rabit implements Runnable{   //定义类实现Runnable接口//覆盖Runnable接口中的run方法public void run(){for(int i=0;i<=300;i++){System.out.println("兔子跑了"+i+"步");}}}public class runableDemo {public static void main(String[] args) {rabit rab=new rabit();//通过Thread类建立线程对象,并把Runnable的子类对象作为参数Thread r=new Thread(rab);//调用Thread类的start方法开启线程r.start();for(int i=0;i<=200;i++){System.out.println("乌龟跑了"+i+"步");}}}


总结

继承Thread类的方式,线程代码存放在Thread子类的run方法中;实现Runnable的方式,线程代码存放在接口的子类的run方法中。我们经常碰到这样一种情况,即当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么,这个类就只能采用实现Runnable接口的方式了,它避免了由于Java的单继承特性带来的局限

0 0