------- android培训、java培训、期待与您交流! ----------
java中实现多线程
在Java 中要想实现多线程代码有两种手段,一种是继承Thread 类,另一种是实现Runnable接口。
- 继承Thread 类
Thread类是在java.lang包中定义的,一个类只要继承了Thread类,此类就称为多线程操作类。在Thread子类之中,必须明确的覆写Thread类中的run()方法,此方法为线程的主体。
下面我们来看定义语法和实例:
/* 语法规则 */ class 类名称 extends Thread{// 继承Thread类 属性… ; // 类中定义属性 方法… ; // 类中定义方法 // 覆写Thread类中的run()方法,此方法是线程的主体 public void run(){ 线程主体; } } /* 实现范例 */ class MyThread extends Thread{ // 继承Thread类 private String name; // 在类中定义一个属性 public MyThread(String name) // 通过构造方法设置属性内容 { this.name = name; } public void run(){ // 覆写Thread类中的run()方法 for (int i = 0; i < 10; i++) { System.out.println(name + "运行,i = " + i); } } } public class ThreadDemo{ public static void main(String args[]) { MyThread mt1 = new MyThread("线程A "); // 实例化对象 MyThread mt2 = new MyThread("线程B "); // 实例化对象 mt1.start(); // 启用多线程,不能直接调用run()方法, mt2.start(); // 要调用从Thread类中继承而来的start()方法 } }
注意:如果要想正确的启动线程,是不能直接调用run()方法的,应该调用从Thread类中继承而来的start()方法,才可以启动线程,因为多线程的实现需要依靠底层操作系统的支持。
- 实现Runnable接口
在Java中也可以通过实现Runnable接口的方式实现多线程,Runnable接口中只定义了一个抽象方法:public void run() ;
同样的,我们先来看一下定义语法和实例:
/* 语法规则 */ class 类名称 implements Runnable{ // 实现Runnable接口 属性… ; //类中定义属性 方法… ; //类中定义方法 //覆写Runnable接口里的run()方法 public void run(){ 线程主体 ; } } /* 实现范例 */ class MyThread implements Runnable{ // 实现Runnable接口 private String name; // 在类中定义一个属性 // 通过构造方法设置属性内容 public MyThread(String name) { this.name = name; } // 覆写Runnable接口中的run()方法 public void run() { for (int i = 0; i < 10; i++) { System.out.println(name + "运行,i = " + i); } } }
- 启动Runnable实现的多线程
Thread类中提供了以下的两个构造方法:
- public Thread(Runnable target)
- public Thread(Runnable target,String name)
这两个构造方法都可以接收Runnable的子类实例对象,所以就可以依靠这一点启动多线程,具体代码如下:
/* 使用Thread类启动多线程 */ class MyThread implements Runnable{ //实现Runnable接口 private String name; //在类中定义一个属性 //通过构造方法设置属性内容 public MyThread(String name) { this.name = name; //为name属性赋值 } //覆写Runnable接口中的run()方法 public void run() { for (int i = 0; i < 10; i++) { System.out.println(name + "运行,i = " + i); } } } public class RunnableDemo{ public static void main(String args[]) { MyThread my1 = new MyThread("线程A ");//实例化Runnable MyThread my2 = new MyThread("线程B ");//子类对象 Thread t1 = new Thread(my1);//实例化 Thread t2 = new Thread(my2);//Thread类对象 t1.start(); //启动线程 t2.start(); //启动线程 } }
通过这些例子,我们可以发现,不管使用哪种方式实现多线程,最终都需要依靠Thread类才能启动之。