美文网首页
多线程基础(三)

多线程基础(三)

作者: Maxinxx | 来源:发表于2019-03-06 21:53 被阅读0次

    有两种方式可以实现多线程程序
    方式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一个实例实现这个接口,其他的多个实现类只需要把这个接口的实例当做参数传进去即可,成员方法就只有一份了。)

    相关文章

      网友评论

          本文标题:多线程基础(三)

          本文链接:https://www.haomeiwen.com/subject/pvrfpqtx.html