美文网首页Android面试相关Android开发Android开发经验谈
Android线程篇(一):实现线程的几种方法及区别

Android线程篇(一):实现线程的几种方法及区别

作者: 小五666 | 来源:发表于2017-12-09 15:48 被阅读221次

“Android开发者社区”微信群期待各位加入,我们一起“抠腚”,一起进步,一起探讨技术……
微信ID:393795397
掘金主页:Android开发者社区

前言:看了这么多线程方面的文章,都是比较松散、碎片的知识点,从来没有看到系统的讲解线程以及并发的文章,自从看了微信公众号"code小生"发的一片关于线程方面基础的讲解,文章写的很好,通俗易懂,但是我感觉到很不过瘾,因为我刚尝到点滋味,后面没有了,所以我决定写个线程和并发的系列,笔者造诣有限,如有描述不当,还忘大家多多指正。

  • 本系列文章全部用Kotlin实现
  • 本文参考“code小生”公众号“带你通俗易懂的理解——线程、多线程与线程池”
    作者:wildma
    作者博客:http://www.jianshu.com/p/fd7d30aa451b

今天开启线程讲系列讲解的第一篇文章,我们从最基础来讲起,首先先来几个概念:

进程和线程

  • 进程:简单来说它是线程的载体,其实它不单单是线程的载体,这个想知道可以自行百度,不是我们今天要讨论的重点
  • 线程:程序执行流的最小单元,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源
  • 线程和进程的关系:同一进程中可以有多个线程,每个线程可与同属一个进程的其它线程共享进程所拥有的全部资源

上面的讲解不是很好理解,关于进程与线程的讲解,这篇文章讲的挺好的-->进程与线程的一个简单解释,结合这篇文章可以透彻了解线程和进程 http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
下面来进入本文的重点,来讲解一下实现线程的几种方法:

1.var一个Thread对象

  • var一个Thread对象
  • 重写Thread的run方法
  • run方法里面写你的代码块
  override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var thread=object : Thread() {
            override fun run() {
                super.run()
                for (i in 0 until 100){
                    println("<<<<<<<"+Thread.currentThread().name+"<<<<"+i)
                }
            }
        }
        thread.start()
    }

骚年,看不懂就该补课了,强烈推荐项目使用Kotlin

2.实现Runnable接口

直接上代码:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var thread=Thread(myRunnable())
        thread.start()
    }
    class myRunnable : Runnable{
        override fun run() {
            for (i in 0 until 100){
                println("<<<<<<<"+Thread.currentThread().name+"<<<<"+i)
            }
        }

    }

3.实现 Callable 接口

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //创建单个线程池
        var myPool=Executors.newSingleThreadExecutor()
        var myFuture=myPool.submit(myCallable())
        myFuture.get()
        println("<<<<<<<<<"+myFuture.get())
    }

    class myCallable : Callable<Int>{
        override fun call(): Int {
            var a=0
            for (i in 0 until 100){
                a=i
            }
            return a
        }
    }

相关文章

网友评论

  • JerryloveEmily:不晓得 kotlin的意义在哪 和Java比 性能没有明显提升
    小五666:@JerryloveEmily kotlin并没有你想象的那么难,他继承了java的好多东西,上手很容易…你试试就知道了
    JerryloveEmily:@Android开发者社区 对于公司来说 对于产品 项目管理 开发效率 企业学习成本 等因素考虑 目前意义还是不大 除非有 c++底层这样的性能 那是很值得考虑的 特别大公司首先就会换起来
    小五666:@JerryloveEmily 性能提升不大 但是使用起来很方便,我感觉是java的升级版

本文标题:Android线程篇(一):实现线程的几种方法及区别

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