多线程基础(三)

2019-03-06  本文已影响0人  Maxinxx

有两种方式可以实现多线程程序
方式1:继承Thread类。方式1的实现方法请戳链接。
https://www.jianshu.com/p/e2a065945805
方式2:实现Runnable接口。

一、线程的生命周期

新建:创建线程对象
就绪:有执行资格,没有执行权
运行:有执行资格,有执行权
阻塞:由于一些操作让线程处于了该状态。没有执行资格,没有执行权。而另一些操作却可以把它给激活,激活后处于就绪状态。
死亡:线程对象变成垃圾,等待被回收。


线程的生命周期

二、Runnable接口

步骤:
A:自定义MyRunnable实现Runnable接口
B:重写run()方法
C:创建MyRunnable的对象
D:创建Thread类的对象,并把C步骤的对象作为构造参数传递

public class MyRunnable implements Runnable{
    @Override
    public void run() {
        for(int i = 0; i < 100; i++) {
            //由于实现接口的方式就不能直接使用Thread类的方法了,但是可以间接的使用
            System.out.println(Thread.currentThread().getName() + "---" + i);
        }
    }
}
    public static void main(String[] args) {
        MyRunnable my = new MyRunnable();
//      Thread(Runnable target, String name)
        Thread t1 = new Thread(my, "one");
        Thread t2 = new Thread(my, "two");
        
        t1.start();
        t2.start();
    }

可以是使用setName给线程起名字。

思考题:实现接口方式的好处是什么?

答:1、可以避免由于Java单继承带来的局限性。(因为每个子类只能继承一个父类,如果一个类已经有了一个父类了,所以它就不能继承Thread类,就无法实现多线程了。但是有了Runnable接口,它可以通过实现这个接口来实现多线程。)
2、适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代码、数据有效分离,较好的体现了面向对象的设计思想。(对于继承Thread类的方法,如果这个子类里面有成员方法,由于实现这个类的时候需要new多个,所以成员方法就有多份。但是对于实现Runnable接口的方法,只需要new一个实例实现这个接口,其他的多个实现类只需要把这个接口的实例当做参数传进去即可,成员方法就只有一份了。)

上一篇 下一篇

猜你喜欢

热点阅读