新年刚开工,有小伙伴准备面试,问我线程方面的东西,自己对于概念的东西也是很少去理解和总结,不觉中,做Android开发已经一年了。懂的却是十分浅的东西,既然已经过去的时光,就不必惋惜,开始写正文吧。
概念部分:(参考文章点击打开链接)
进程:狭义上讲:正在执行的程序,由线程组成,可包括多个线程运行。
广义上讲:进程是一个具有一定独立功能的程序有关某个数据集合的一次运行活动。可以申请拥有系统资源,是一个动态的概念。
特点:进程是实体,具有地址空间。
线程:为进程中执行的某个程序的片段。
组成:一个线程由线程ID,当前指令针,寄存器,堆栈组成。是进程的实体,是被系统独立分派调试的基本单元。
状态:拥有5种状态,新建,就绪,运行,阻塞,死亡等5种状态。
阻塞状态分3种,等待阻塞,同步阻塞,其他阻塞。
等待阻塞:运行线程执行wait()方法,本线程进行等待状态。
同步阻塞:线程在获取synchronized同步锁失败(锁被其他线程占用),进入同步阻塞状态。
其他阻塞:通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者 超时、或者I/O处理完毕时,线程重新转入就绪状态。
启动方式:3种。1.继承Thread. 2.实现Runnable接口. 3直接在函数体使用.
代码详解:点击打开链接
多线程:在程序中同时运行多个线程完成工作。
线程池:存在原因:在Java中,new 一个新的对象,比较耗费内存资源。因此,就有了线程池的存在。
应用情况:需要大量线程完成工作,并且每个工作的时间较短。
线程同步:发送一个请求,等待结果返回,再发送另外一个请求。
synchronized :用于给对象,方法,代码加锁,被锁定大代码块部分,同一时间只能被一个线程执行这段代码。
优点:避免死锁,读脏数据发生,保证秩序性。
一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会按顺序来修改
。
异步:发送一个请求,不需要等待结果,随时可以发送下一个请求。
优点:异步可以提高效率,可同时做多项工作,但必须保证是并发处理。
并发:并发运行就是让计算机同时运行几个程序,同一个程序多个进程或线程。