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
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,405评论 25 708
  • 一.线程与进程相关 1.进程   定义:进程是具有独立功能的程序关于某个数据集合上的一次运行活动,进程是操作系统分...
    Geeks_Liu阅读 1,748评论 2 4
  • 在大家的潜意识里葡萄干只是一种人们喜爱的零食,当看到这篇文章,才领略到葡萄干这么多的神奇功效,还有一个问题,有的朋...
    wsxyz阅读 422评论 0 0
  • 有些时候有些事情或许注定要这样,慢一点也未尝不好,一段时期,一些思想会有所不同,就像你认为很值得的一个东西...
    倾听之雨阅读 377评论 0 0
  • 以这样一种方式结束初恋,是真的吗? 2015.4.27—2015.5.12 已经整整半个月了,你一直没有主动联系我...
    金融妞阅读 348评论 0 0