“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
}
}
网友评论