前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔记——线程(十二)

笔记——线程(十二)

作者头像
木溪bo
发布2018-12-27 10:19:00
3690
发布2018-12-27 10:19:00
举报

《个人平时笔记,看到的同学欢迎指正错误》

1、在开发中我们经常会在UI线程中开启子线程去执行耗时操作然后使用Handler机制通信,这里是不建议这么操作的,操作不当容易造成内存溢出或NullPointException空指针;例如我们还没有执行完耗时操作就离开了当前页面,而没有结束子线程的行为,而子线程又持有外部UI的Handler引用。所以当有耗时操作是提倡异步任务AsyncTask执行。

线程同步锁(同步锁机制):如A线程要请求某个资源,但是此资源加了同步锁又正在被B线程使用着,因为同步机制存在,A线程请求不到该资源,怎么办,A线程只能继续等待下去。注意没有线程同步的说法,代码执行的任务可以说是同步的自上而下运行。

线程异步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为现在没有加同步锁,所以A线程能请求的到该资源,故A线程无需等待。异步也可以理解为在主线程中开启一个子线程,而让子线程执行一部分任务,主线程则会继续执行下去而不用等待子线程执行完;即开启一个子线程就是一个异步线程操作。

>1、 什么时候必须同步?什么叫同步?如何同步?

要跨线程维护正确的可见性,只要在几个线程之间出现共享非 final 变量,就必须使用synchronized(或volatile)以确保一个线程可以看见另一个线程做的更改。

小结:为了防止多个线程并发时对同一数据变量做出修改,所以需要同步需要加锁,否则会造成数据不一致(就是所谓的:线程安全。如java集合框架中Hashtable和Vector是线程安全的。我们的大部分程序都不是线程安全的,因为没有进行同步,而且我们没有必要,因为大部分情况根本没有多线程环境),所以这里才会使用线程锁(synchronized)。

>2、进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,’进程是系统进行资源分配和调度的一个独立单位。

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程的执行是抢占式的,所以CPU执行哪个线程具有不确定性的。

(1)线程是进程的一部分

(2)CPU调度的是线程

(3)系统为进程分配资源,不对线程分配资源

总结起来,使用多线程编程具有如下几个优点: 01. 进程之间不能共享内存,但线程之间共享内存非常容易 02. 系统创建进程时需要为该进程重新分配系统资源,但创建线程则代价小得多,因此使用多线程来实现多任务并发比多进程的效率高 03. Java语言内置了多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了Java的多线程编程 04.线程中Thread.start()是异步,Thread.run()是同步 05.少用Thread.sleep(),它是一个阻塞方法,容易抛出InterruptedException;导致程序中断,而中断可能导致应用程序丧失及时取消活动或关闭的能力;使用SystemClock.sleep()不考虑中断异常,可能发生的中断会被推迟到下一次中断来临。

2、并发与并行是基于硬件而言的。

并发,指的是多个事情,在同一时间段内同时发生了。指在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。

并行,指的是多个事情,在同一时间点上同时发生了。指在同一时刻,有多条指令在多个处理器上同时执行。

并发的多个任务之间是互相抢占资源的->单cpu

并行的多个任务之间是不互相抢占资源的->多cpu

只有在多CPU的情况中,才会发生并行。否则,看似同时发生的事情,其实都是并发执行的。

image

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.12.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、在开发中我们经常会在UI线程中开启子线程去执行耗时操作然后使用Handler机制通信,这里是不建议这么操作的,操作不当容易造成内存溢出或NullPointException空指针;例如我们还没有执行完耗时操作就离开了当前页面,而没有结束子线程的行为,而子线程又持有外部UI的Handler引用。所以当有耗时操作是提倡异步任务AsyncTask执行。
  • >1、 什么时候必须同步?什么叫同步?如何同步?
  • >2、进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,’进程是系统进行资源分配和调度的一个独立单位。
  • 2、并发与并行是基于硬件而言的。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档