一、理解浓缩

  线程是计算机cpu调度的最小的单位,并且jvm中的线程和机器中的线程是一一对应的,在现代编程中,很多时候为了充分利用机器资源而使用多线程,当然很多时候工作中并未使用线程,还是根据场景来选择,比如遇到有大批量数据处理时,那么就可以大大提高处理效率,说道多线程一般都会说到两个老生常谈的几个概念【并行】,【并发】【串行】,打个比方说明这三个概念,有一个做饼子的炉子,三个烧饼师傅甲乙丙要各做10块

a.【串行】师傅甲做完10块饼子,然后让第二个师傅乙做完10块饼子,最后是第三个师傅丙做,这就是串行,师傅直接互补干扰,觉得不会有并发等问题,但是有利有弊,效率一般比较底下。

b.【并发】师傅甲做完1块饼子,然后让师傅乙做1一块饼子,然后师傅丙(这里次序不是绝对的),这就是并发,对于计算机来说速度非常快,做饼子那个快你都没眨眼就做好了,当然这个炉子也可以多个的,这里重在说明最大限度使用机器资源,不让机器歇着,是不是跟资本家有点像。

c.【并行】对于并行,一个炉子是不行的,比如我们这里加2个炉子,一人一个炉子,这样三个师傅每人一个炉子同时做饼子,注意是绝对的同时(并发是假的同时,幻觉而已),这就是并行,并行更多说的是概念,比如马路双向8车道也是并行的好例子,理解概念就好。

二、使用注意事项

2.1 使用姿势

线程使用姿势
方式 特点
a.继承Thread类  没啥说的,直接创建实例,然后start即可开启一个异步线程
b.实现Runnable接口  工作中用的稍微多点,比如还可以继承点其它类
c.使用FutureTask方式    使用上类似b,但是可以拿到执行结果

2.2 线程相关常用方法

方法名 简单说明 注意事项 常用使用场景
sleep( time) 让当前线程睡眠一定时间阻塞 【Thread类的静态方法】执行此方法后线程只是让出cpu执行时间片阻塞但并未释放锁等资源 比如在循环里间隔一段时间执行一次任务(eg.刷接口)
wait,wait(time) 让调用线程阻塞,也有带时间参数的变种方法 【Object类实例方法】使用此方法有限制,需要先通过synchronized获得监视器锁然后再调用,调用后释放当前监视器锁,但是占有的其它的监视器锁并不释放 典型的生产者消费者
notify,notifyAll 与wait对应,即唤醒阻塞的线程 【Object类实例方法】一般使用notifyAll,因为notify唤醒是不确定的,直接都唤醒就能避免(使用前也得获得监视器锁)
yield 让出线程的时间片给其它线程 【Thread类的静态方法】执行这个方法后并不是100%就不执行了,这个方法只是通知调度器自己分得的时间片可以不用了,此时线程并未阻塞 实际工作中使用较少,调试代码有时可以用用
join 让调用线程阻塞等待,直到线程执行完毕 【Thread类的实例方法】阻塞的是调用线程,功能与countdownlatch类似 多任务协调时使用
interrupt,isInterrupted, interrupted 设置中断标志来打断阻塞 【Thread类的静态方法】该方法只是设置阻塞中断标志, interrupted是检测当前调用线程的中断状态的并且会清除中断标志

最新文章

  1. Basic Tutorials of Redis(7) -Publish and Subscribe
  2. windows下webstorm开发react-native智能提示
  3. javaScript事件(一)事件流
  4. jquery自定义插件——以 选项卡插件为例
  5. sublime上安装c/c++代码分析工具 sublime Linter - cppcheck
  6. python decorator的理解
  7. MySQL源码 数据结构array
  8. Appium Server 传递Android参数
  9. 面对考试毫无畏惧的SSH
  10. NPOI导出excel(带图片)
  11. CentOS7.3 ARM虚拟机扩容系统磁盘
  12. js函数之四大调用模式
  13. 【dedecms】DEDE列表页调用文章内容第一张图片(非缩略图)方法
  14. OutOfMemoryError/OOM/内存溢出异常实例分析--堆内存溢出
  15. day2-安装python以及基本使用
  16. 排序算法<No.6>【插入排序】
  17. thinkphp生成的验证码提示因存在错误无法显示
  18. ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树,倍增lca)
  19. jupyter、flask、tornado、djiango安装
  20. Bringing up interface eth0: Determining if ip address 10.109.67.81 is already in use for device eth0...

热门文章

  1. Lua字符串及模式匹配
  2. 【Python】【demo实验22】【练习实例】【猴子吃桃问题】
  3. ajax同源策略,jsonP跨域访问
  4. 剑指offer4:重建二叉树(后序遍历)
  5. http请求之of_ordering_http_post
  6. ajax-springMVC提交表单的方式
  7. oracle创建用户表空间
  8. 随便----js参考书
  9. 与 QWidget 有关的 Qt 可视化组件的继承关系图
  10. Centos7:solr伪集群(SolrCloud)搭建