zoukankan      html  css  js  c++  java
  • 多线程编程(三)--创建线程之Thread VS Runnable

    前面写过一篇基础的创建多线程的博文

    那么本篇博文主要来对照一下这两种创建线程的差别。

     

    继承Thread类:

             还拿上篇博客的样例来说:

              

           四个线程各自卖各自的票,说明四个线程之间没有共享,是独立的线程。每一个线程平等。没有优先级关系。

    这三个线程不是一次交替运行,而是三个线程同一时候被运行的情况下,有的线程被分配时间片的机会多。票被提前卖完,有的线程被分配的时间片的机会少。票迟一些卖完。


    故,利用扩展Thread类创建的多个线程,尽管运行的是同样的代码,但彼此相互独立,且各自拥有自己的资源。互不干扰。

     

    分析Thread类的源代码:

             1Thread类也是实现Runnable接口的。因此实现了Runnable接口中的run方法

             2)当生成一个线程对象时,假设没有为其设定名字,那么线程对象的名字将使用例如以下形式:Thread-number,number将是自己主动添加的。并被全部的Thread对象所共享(由于它是static的成员变量)

             3)我们须要重写run方法,由于此时run方法什么事情也不做。

             4)当使用Runnable方式生成线程对象时,我们须要实现Runnable接口的run方法,使用new Threadnew MyThread())来生成线程对象。这时的线程对象的run方法调用MyThread类的run方法,这样我们自己编写的run方法就运行了。

     

    实现Runnable接口:

              

              通过实现Runnable接口来实现线程间资源共享。

     

     

    继承Thread类与实现Runnable接口的差别:

    採用继承Thread类实现多线程:

    优势:编写简单,假设须要訪问当前线程。仅仅须要使用this就可以。无需使用Thread.currentThread()方法。

    劣势:由于这样的线程类已经继承了Thread类,所以不能再继承其它类。

     

    实现Runnable接口:

    优势:线程仅仅是实现了接口,还能够继承其它类。

             这样的情况下,能够使多个线程共享一个target对象,所以很适合多个线程用来处理同一份资源的情况,从而能够将cpu、代码和数据分开,形成清晰的模型,较好的体现面向对象思想。

    劣势:编程略微复杂。假设须要訪问当前线程,必须使用Thread.currentThread()方法。

     

            实现Runnable接口相对于扩展Thread类来说,具有无可比拟的优势。这样的方式不仅有利于程序的健壮性。使代码可以被多个线程共享。并且代码和数据资源相对独立。从而特别适合多个具有同样代码的线程去处理同一资源的情况。这样一来。线程、代码和数据资源三者有效分离,非常好地体现了面向对象程序设计思想。因此差点儿全部的多线程程序都是通过实现Runnable接口的方式来完毕的。


  • 相关阅读:
    Unity3d热更新全书-加载(一)从AssetBundle说起
    Unity3D热更新全书-脚本(三) C#LightEvil语法与调试
    Unity3D热更新全书-脚本(二) 两级分化
    Unity3D热更新全书-脚本(一) 初识脚本
    Unity3D热更新全书-何谓热更新,为何热更新,如何热更新
    C#Light/Evil合体啦
    C#最良心脚本语言C#Light/Evil,XamarinWP8Unity热更新最良心方案,再次进化.
    C#Light 再推荐,顺便介绍WP8 功能展示项目
    任意两张带透明图像的一种形状过渡效果
    FileFilter
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6754296.html
Copyright © 2011-2022 走看看