`

java中使用多线程不能明显提高程序效率的一些原因

阅读更多
java中使用多线程不能明显提高程序效率的一些原因.
 
使用多个线程来处理多任务的时候,效率肯定是有提高的.但是必须要慎用,否则容易出现问题.
 
1,多线程主要是为了充分利用多核cpu,大内存这些资源.
如果你的硬件跟不上,只有一个cpu,那么多线程从并发变成了串行了,另外再加上线程上下文切换的时候,那你就得不偿失了.
2.原子问题
如果多线程是同步操作一个原子数据,(多个线程同步去处理一个加锁的对象),那效率肯定不会提升,就好像1个人去做1件事和多个人排队去做一件事效率是一样的;
 
3.线程的个数对于一个应用程序来讲的话,往往会有一个临界值。
  临界资源的访问问题,程序中临界区的指令一般来说越少越好,最好不要在临界区中做一些重量级的事情,例如说数据库,写文件,读文件!
 
4.对硬盘的读写有特殊的地方。
对磁盘进行多线程处理的时候,效率会急速下降!!
因为不同文件的读写,会造成磁头的频繁转换,磁头的频繁转换要比读取磁盘的时间更长。
所以这种情况下,最好有个线程去读取文件,其他的线程去处理文件数据中的业务逻辑处理.
 
5.操作系统的IO通道数量的影响
采用普通的File文件API来读写多文件.使用多线程的话很大程度上也不会提高效率.
因为文件,网络等流的读写都需要操作IO通道,而操作系统的IO通道数量是固定的。
我们假设你的电脑只有一个IO通道,如果你打开一个文件流并进行读写,则占用了一个IO通道,如果你又打开一个文件流,则第二个文件流需要等待第一个文件关闭通道才能真正意义上的进行读写。 所以实际上,你打开多个文件同时进行读写时就是在串行单线程操作。
 
解决的办法是采用 NIO: java.nio (Java 2 Platform SE v1.4.2)
NIO的意思当然就是同时开启N个IO通道了,如果你的机器硬件的确只支持同时打开一个通道的话,Java虚拟器会帮你做虚拟协调NIO比普通IO技术至少快30%.
具体可以查看JAVA文件NIO的文档.
 
普通方式写文件先得到FileOutputStream,然后直接设用 os.write(bytes);
而现在不同点在于先得到一个Channel再建构一个Bytebuffer,再用两者完成任务,java虚拟机帮你完成剩下的CPU和IO任务调度.
其实这个方式也就是异步的样子了,实际里很多前端MVC框架如JSF的实现primefaces,已经封装了,也没法用.如果要用的话也是用Apache NIO 框架 Mina.
分享到:
评论

相关推荐

    Java多线程编程指南

    Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。...多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。

    解析Java的多线程机制

    Unix操作系统环境下,应用程序可以利用fork... 可以说:Java语言对应用程序多线程能力的支持增强了Java作为网络程序设计语言的优势,为实现分布式应用系统中多客户端的并发访问以及提高服务器的响应效率奠定坚实基础。

    线程 JAVA java线程 java线程第3版 java线程第2版第3版合集

    你将学习如何使用线程来提高效率,如何有效地使用它们,以及如何避免常见的错误。本书讨论了死锁、竞态条件以及饥饿等问题的细节,帮助你编写没有潜在bug的代码。 本书第二版提供了对Thread和ThreadGroup类、...

    java项目史上最简单的多线程使用方法(demo)

    java项目史上最简单的多线程使用方法(demo),下载下来一看就明白企业实际项目中如何使用多线程提高程序效率,导入idea或者eclipse中,修改以下数据库配置即可直接使用

    Java高级程序设计-多线程(二).pptx

    合理使用多线程能够提高程序的执行效率,处理高并发应用。 线程的创建有继承Thread类和实现Runnable接口两种方式,通过Runnable方式可以更加容易实现多线程之间资源共享。 通过sleep可以使线程进入休眠状态,通过...

    Java程序设计案例教程-第8章-多线程编程.pptx

    多线程程序包含同时运行的两个或多个部分。这种程序的每一部分被称为一个线程,并且每个线程定义了单独的执行路径。因此,多线程是特殊形式的多任务处理。 第5页 Java程序设计案例教程-第8章-多线程编程全文共36页,...

    java学习多线程处理

    多线程开发的优势:改善用户体验,提高资源利用率(单线程的处理效率低下) 线程的使用步骤:定义一个线程,创建线程的实例,启动线程,终止线程 主线程:(java中所有的线程都是java.lang.Thread类或者其子类的一...

    Java多线程与线程安全实践-基于Http协议的断点续传的实现.rar

    可以使用Java中的多线程技术,例如通过创建多个线程同时下载文件的不同部分,从而提高下载速度和效率。 断点续传设计:为了支持断点续传,需要在下载过程中记录已下载的文件部分,并在下次下载时从断点处继续下载。...

    多线程终极案例程序(多线程进阶)

    多线程实现案例(多兵种联合攻击防御塔程序),适合java进阶学习。

    java多线程设计模式

    详细讲解Java的多线程,以及多线程程序的开发模式,开发方法,和提高Java程序的运行效率

    多线程操作实例源码

     多线程的好处在于可以提高CPU的利用率——任何一个程序员都不希望自己的程序很多时候没事可干,在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。...

    java多线程资料

    多线程 思索问题解决 ...Java是第一个在语言的核心中支持线程,通过多线程的并发运行提高了系统资源的利用率,改善了系统性能,但由于多线程要共享内存资源,为了避免数据资源的使用混乱,必须对线程的同步问题作出解

    多线程操作实例源码,,

     多线程的好处在于可以提高CPU的利用率——任何一个程序员都不希望自己的程序很多时候没事可干,在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。...

    Java第19讲:多线程(1).txt

    多线程并发执行可以提高程序的效率,可以同时完成多项工作 举例:电脑管家同时进行清理垃圾、查杀修复、优化加速,这就是多线程。 如果是单线程的话,在运行清理垃圾时,其它两个都得在等待,不能运行。 ...

    Java高并发精讲(云盘下载)

     多线程的运行原理:cpu在线程中做时间片的切换(多线程可以提高程序的运行效率,但不能无限制的开线程) 1.3实现线程的两种方式  1、继承Thread的方式  2、声明实现 Runnable 接口的方式 1.4 JAVA同步 ...

    Java多线程编程总结

    要认识多线程就要从操作系统的原理说起。以前古老的DOS操作系统(V6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情。比如你在copy东西的时候不能rename文件名。为了提高系统的利用效率,采用批处理来...

    java多线程操作简单示例

    多线程程序是Java语言的一个很重要的特点。在一个Java程序中,我们可以同时并行运行多个相对独立的线程,例如,我们如果创建一个线程来进行数据输入输出,而创建另...多线程程序设计大大提高了程序执行效率和处理能力。

    java的ppt java语言程序设计.ppt

    铁道出版社 ppt Java语言程序设计 学习目标: 掌握面向对象的程序设计的思想、方法及其特征 学会使用Java语言进行程序设计 学会运用面向对象方法分析和解决实际问题的能力 ...多线程 网络功能 执行效率

    Java程序设计习题集下载

    第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 第二部分 参考答案 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串...

Global site tag (gtag.js) - Google Analytics