码迷,mamicode.com
首页 > 编程语言 > 详细

java实现多线程的两种方式

时间:2019-01-17 19:39:26      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:xtend   方式   构造函数   main   ring   end   nts   system   而且   

1.继承Thread类

public class Demo1 {
    public static void main(String[] args) {
        MyThread mt = new MyThread();
        mt.start();

        for (int i = 0 ; i < 1000 ; i++){
            System.out.println("bbb");
        }
    }
}

class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0 ; i < 1000 ; i++){
            System.out.println("aaaaa");
        }
    }
}

 

2.实现Runnable接口

原理:Thread构造函数中传入了Runnable的引用,成员变量记住了它,调用start()方法时调用了run()方法,判断成员变量Runnable的引用是否为空。不为空时执行。编译时看的是Runnable的run(),运行是执行的是子类的run方法。

public class Demo2 {
    public static void main(String[] args) {
        Thread t = new Thread(new MyThread2());    // 父类引用指向子类对象
        t.start();

        for (int i = 0 ; i < 1000 ; i++){
            System.out.println("bbb");
        }
    }
}

class MyThread2 implements Runnable{

    @Override
    public void run() {
        for (int i = 0 ; i < 1000 ; i++){
            System.out.println("aaaaa");
        }
    }
}

 

3.两种方式的优缺点以及使用场景

  • 继承Thread

优点:可以直接使用Thread类中的方法,代码简单

缺点:如果已经有了父类,就不能用这种方法了。

  • 实现Runnable接口

优点:即使自定义的线程有了父类也没有关系,因为有了父类也可以实现接口,而且接口是可以多实现的

缺点:不能直接使用Thread中的方法,需要先获取到线程对象后,才能得到Thread的方法,使用起来比较麻烦

  • 建议:

如果没有父类,用Thread,否则用Runnable。

 

4.用匿名内部类的方式实现上面两种方式

public class Demo3 {
    public static void main(String[] args) {
        new Thread() {                                   // 继承Thread类
            @Override
            public void run() {
                for (int i = 0 ; i < 1000 ; i++){
                    System.out.println("aaaaa");
                }
            }
        }.start();


        new Thread(new Runnable() {                      // 将Runnable的子类对象传递给Thread的构造方法
            @Override
            public void run() {
                for (int i = 0 ; i < 1000 ; i++){
                    System.out.println("bbb");
                }
            }
        }).start();
    }
}

java实现多线程的两种方式

标签:xtend   方式   构造函数   main   ring   end   nts   system   而且   

原文地址:https://www.cnblogs.com/chichung/p/10283654.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!