java之多线程中Thread类和Runnable接口使用方法

java提供了两种线程方式,一种是继承java.lang包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码!第二种是实现Runnable接口创建多线程。下面就跟大家具体的介绍一下这两种方式!
在学习多线程之前先来看看我们熟悉的单线程程序

package bean;
public class Example3_2 {
    public static void main(String[] args){
        MyThread myThread=new MyThread();//创建myhread对象
        myThread.run();
        while (true){
            System.out.println("Main方法在运行");
        }
    }
}
class MyThread{
    public void run(){                                                                                
        while(true){
            System.out.println("MyThread类的run()方法在运行");
        }
    }
}

运行结果如下面所示
java之多线程中Thread类和Runnable接口使用方法_第1张图片
从上面运行结果可以看出程序一直打印的是“MyThread类的run()方法在运行”,而不会执行main()方法中的打印语句。这是因为上面程序是一个单线程程序,调用MyThread类的run()方法时遇到了死循环,循环会一直进行。
如果想要两个while循环中的打印语句能够并发执行,那就需要实现多线程了,实现多线程有两种方式,现在就给大家介绍第一种方式

1.继承Thread类创建多线程

把以上代码进行简单修改

package bean;

public class Example3_2 {
    public static void main(String[] args){
        MyThread myThread=new MyThread();//创建线程myhread的线程对象
        myThread.start();                //开启线程
        while (true){                    //通过死循环语句打印输出
            System.out.println("Main方法在运行");
        }
    }
}
class MyThread extends Thread{
    public void run(){                                                                                
        while(true){                     //通过死循环语句打印输出
            System.out.println("MyThread类的run()方法在运行");
        }
    }
}

运行结果如下面:
java之多线程中Thread类和Runnable接口使用方法_第2张图片
从上面能看出两个循环语句轮流执行了,说明该例实现了多线程!!!
单线程的程序在运行时,会按照代码的调用顺序进行执行,而在多线程中main()方法和MyThread类的run()方法却可以同时运行,互不影响,这正是单线程和多线程的区别。

2.实现Runnable接口创建多线程

首先,为啥要使用Runable接口来创建多线程呢,这是因为通过继承Thread类实现多线程有一定的局限性,因为java中只支持单继承,一个类一旦继承了某个父类就无法再继承Thread类了
Runnable克服了这种弊端,Runnable接口提供了run()方法的原型,因此创建新的线程类时,只要实现此接口,既只要特定的程序代码实现Runnable接口中的run()方法,就可以完成新线程类的运行下面是一个使用Runnble接口并实现run方法创建线程的例子。

package bean;

public class Example3_2 {
    public static void main(String[] args){
        MyThread myThread=new MyThread();  //创建线程myhread的线程对象
        Thread thread=new Thread(myThread);//创建线程对象
        thread.start();                    //开启线程,执行线程中的run()方法
        while (true){                      //通过死循环语句打印输出
            System.out.println("Main方法在运行");
        }
    }
}
class MyThread implements Runnable{
    public void run(){                                                                                
        while(true){                       //通过死循环语句打印输出
            System.out.println("MyThread类的run()方法在运行");
        }
    }
}

运行结果和上面一样
java之多线程中Thread类和Runnable接口使用方法_第3张图片
下面咱们具体讲一下用Runnable创建线程步骤:

Runnable创建线程步骤

(1)创建一个实现Runnable接口的类,并且在这个类中重写run方法
class MyThread implements Runnable{
    public void run(){                                                                                
        ..........
        }
(2)使用关键字new创建一个MyThread的实例
MyThread myThread=new MyThread();
(3)通过Runnable的实例创建一个线程对象,在创建线程对象时,调用的构造函数是new Thread(myThread),它用myThread中实现的run()方法作为新线程对象的run()方法。
Thread thread=new Thread(myThread);
(4)通过调用ThreadType对象的start()方法启动线程运行。
thread.start();

以上是两者的简单使用方式,下一篇会讲解一下两种多线程方式的区别,有需要的可以看一下!!!

你可能感兴趣的:(java)