17 为什么会有线程?
来源:互联网 发布:九龙朝精灵升级数据 编辑:程序博客网 时间:2024/04/29 10:48
00 为什么要有多线程?
单线程,就是指单个流水线的进程(A→B→C),这样的效率不太高。
多线程,指多个单线程同时进行,效率高。
生活场景:
购买电脑时,销售人员介绍这台电脑是cpu几核。通常来说,核越多,运行的就越快。单核CPU运行就是单线程,双核CPU就是多线程。
类似于生活中的行车道,有的车道小,只有一条道,所以容易造成拥挤。如果车道变宽,可以跑多个车道,那么效率就会高很多了。一条道为单线程,多条道为多线程,可以提高效率。
01 多线程的使用
继承Thread类,new Thread(){}.start(),重写run()方法,使用start()方法
实现Runnable接口,new Thread(new Runnable() {})。start()
两者的区别:
继承可以直接使用Thread类中的方法,代码简单。弊端:不能实现多继承
实现接口可以在子类继承父类的情况下使用。
02 并行与并发的区别
并行:多个程序共同进行,类似多个水管同时放水。
并发:多个程序依次发送,类似QQ聊天,先给A发消息,让A等着,再给B发消息,依此类推。
03 同步与异步的区别
同步:进行同一个步骤
A输入:”我”,”爱”,”编”,”程”
B输入:”我”,”不”,”爱”,”编”,”程”
如果A输入和B输入不是同步的,输出时可能会出现”我爱 我不爱编程 编程”。
如果A输入和B输入是同步的,输出则是”我爱编程 我不爱编程”
如果某一部分代码块(e.g. A输入/B输入)需要同步进行,则一定要设为同步synchronized/ (wait,notify).
异步:当调用一个需要花费很长时间来执行的方法,并不希望让程序等待方法返回时,就应该使用异步编程,在很多情况下,采用异步途径往往更有效率。
04 线程池
线程池就是类似于养鱼的池子,每一条鱼都是一个线程,当钓起一条鱼后,钓鱼这个动作就算完成了,而这条鱼当场不会死亡,又可以将这条鱼再放回线程池继续钓。
- 17 为什么会有线程?
- 为什么会有serialVersionUID
- 为什么会有“剩男剩女”
- 为什么会有句柄
- 为什么会有hibernate
- 为什么会有servlet?
- 为什么会有异常
- 为什么会有JavaScript???
- 为什么会有java,为什么会有.net
- 为什么会有Java,为什么会有.NET
- 06 为什么会有继承?为什么会有super?
- 为什么会有这个blog
- 为什么会有类型转换?
- 为什么物体会有颜色
- 为什么会有Presentation Error
- java为什么会有serialVersionUID
- 为什么会有字符串函数?
- 为什么会有NodeJS之一
- java生成pdf测试源码
- c++名字空间
- Qt学习之路(52): 拖放技术之一
- BZOJ1089——[SCOI2003]严格n元树
- Java权限框架Shiro过滤连源码解读
- 17 为什么会有线程?
- 缓存与数据库不一致的解决方案
- 【转载】【最小边覆盖 & 最小路径覆盖 & 最小顶点覆盖 & 最大独立集 & 最大团】
- iOS中Info.plist文件的常见配置
- tjut 3466
- Demo-列表切换
- QQ微博微信分享功能
- Restful风格(400- The request sent by the client was syntactically incorrect错)
- POI导出EXCEL经典实现