java中的线程和进程-未完待续
来源:互联网 发布:淘宝网店为什么会关闭 编辑:程序博客网 时间:2024/06/15 15:01
1:项目中什么时候要用线程和进程?
1.1:场景一:一个业务逻辑有很多次的循环,每次循环之间没有影响,比如验证1万条url路径是否存在,正常情况要循环1万次,逐个去验证每一条URL,这样效率会很低,假设验证一条需要1分钟,总共就需要1万分钟,有点恐怖。这时可以用多线程,将1万条URL分成50等份,开50个线程,没个线程只需验证200条,这样所有的线程执行完是远小于1万分钟的。
场景二:需要知道一个任务的执行进度,比如我们常看到的进度条,实现方式可以是在任务中加入一个整型属性变量(这样不同方法可以共享),任务执行一定程度就给变量值加1,另外开一个线程按时间间隔不断去访问这个变量,并反馈给用户。
总之使用多线程就是为了充分利用cpu的资源,提高程序执行效率,当你发现一个业务逻辑执行效率特别低,耗时特别长,就可以考虑使用多线程。不过CPU执行哪个线程的时间和顺序是不确定的,即使设置了线程的优先级,因此使用多线程的风险也是比较大的,会出现很多预料不到的问题,一定要多熟悉概念,多构造不同的场景去测试才能够掌握!
1.2:你跟他说,如果做 java web 方面开发的话几乎用不到多线程!因为有多线程的地方 servlet 容器或者其他开发框架都已经实现掉了!
一般在网络应用程序中使用多线程的地方非常多!
另外,你说的拷贝文件使用多线程,那是没有用的!以多线程来提高效率的场景一般在 CPU 计算型,而不是在 IO 读写型。CPU 可以会有多个核心并行处理计算,但是磁盘 IO 就没这功能了,磁头只有一个,根本不可能靠多线程提高效率!
一般来说,磁盘 IO 的并发能力为 0,也就是说无法支持并发!网络 IO 的话由于带宽的限制的,使用多线程处理最多也只能达到带宽的极值。
对于磁盘 IO 来说,多线程可以用于一个线程专门用于读写文件,其他的线程用于对读取数据进行处理,这样才有可能更好地利用 CPU 资源。
如果仅仅是单纯的文件复制,使用多线程操作的话,会使用磁头在磁盘上不停地进行寻道操作,使得效率更为低下!
1.3:1。压力测试时,会用到多线程。
2。服务器编程时,会用到多线程。
3。使用监听器时,可能会用到多线程。
4。跑JOB时,可能会用到多线程。
2:小知识点归纳
Thread.sleep((int)(Math.random()*3000)): Math.random()是产生一个随机数 大小在0和一之间 然后再乘以3000;前面那个int呢 就是把乘以3000之后的这个随机数强制转换成int类型 然后再调用Thread.sleep(time)函数 让线程休眠time毫秒3:如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享【原理】 实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
- java中的线程和进程-未完待续
- 线程的创建和运行(未完待续)
- java中的锁(未完待续)
- C++中的set_new_handler和new_handler 【未完待续】
- Java基础--待续未完
- Java-未完待续
- java内存-未完待续
- java中的进程和线程
- java中的进程和线程
- JAVA中的进程和线程
- java中的集合操作类(未完待续)
- Java中HashMap和TreeMap的区别(未完待续)
- 线程通信 线程同步(未完待续)
- JAVA问题答疑(未完待续)
- Java集合总结(未完待续)
- java并发学习(未完待续)
- java 正则表达式---未完 待续
- 进程学习笔记(未完待续)
- 总结 特征选择(feature selection)算法笔记
- [noip2014] 解方程
- 数字和字符串长度不够补0
- 设计模式(20)——状态 State
- 《七点三刻》,有价值的新闻早餐 2017年11月9日,星期四
- java中的线程和进程-未完待续
- Spark大数据开发之旅之一:准备工作
- [复习][ZSOI2008]矩阵乘法 矩阵
- 关于Integer
- 第一个自己写的小程序
- 高精度! 模板代码!
- JDK 动态代理运行原理
- 设计模式(21)——策略 Strategy
- wifi静态iP