`

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.
分享到:
评论

相关推荐

    javad多线程

    Java 多线程编程是指在一个程序中可以运行多个线程,以提高程序的执行效率和响应速度。在 Java 中,多线程编程可以通过 Thread 类和 Runnable 接口来实现。 为什么需要多线程? 在单线程程序中,如果某个任务需要...

    JAVA单线程多线程

    ### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...

    Java多线程程序案例

    根据给定文件的信息,我们可以提炼出以下关于Java多线程程序设计的知识点: ### Java多线程基础 在Java中,多线程是通过`Thread`类或实现`Runnable`接口来实现的。多线程可以提高程序的执行效率,尤其是在处理CPU...

    java多线程之赛马程序实验8多线程练习下载进度

    本实验"java多线程之赛马程序实验8多线程练习下载进度"聚焦于如何利用多线程来模拟实际场景中的下载进度显示。在这一过程中,我们将探讨Thread类的`run`和`start`方法,以及如何通过进度条来可视化表示下载过程。 ...

    Java多线程程序设计

    Java多线程程序设计是Java开发中的重要领域,它允许应用程序同时执行多个任务,从而提高系统资源的利用率和程序的响应速度。在Java中,多线程主要通过两种方式实现:继承Thread类和实现Runnable接口。 一、创建线程...

    java多线程小汽车运行程序

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在这个名为"java多线程小汽车运行程序"的项目中,我们可以看到一个利用Java实现的多线程应用程序,可能是模拟汽车...

    java多线程经典案例

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...

    Java多线程测试程序,

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应性。在本项目中,“Java多线程测试程序”利用了这一特性,结合图形用户界面(GUI)框架JFrame,实现了企鹅在界面上的动态...

    深入浅出 Java 多线程.pdf

    在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的优点、多线程编程的缺点、多线程编程的应用场景、多线程编程的实现方法等内容。 一、多线程编程的基本概念 多线程编程是指...

    Java程序设计\java 多线程

    在Java编程中,多线程是一项关键特性,它允许程序同时执行多个独立的代码段,提高了应用程序的效率和响应性。下面将详细讲解Java多线程的相关概念、创建线程的方式以及线程同步和调度。 5.1 相关概念: 1. **程序**...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    java面板多线程发牌程序

    多线程是让多个任务同时运行的技术,它允许程序在处理一项任务的同时进行其他操作,从而提高了效率。在这个发牌程序中,多线程的应用确保了发牌过程不会阻塞用户界面的更新。通常,发牌操作会放在一个单独的线程中...

    java 多线程操作数据库

    本文将基于一个具体的Java多线程操作数据库的应用程序,深入探讨其背后的原理、实现细节以及潜在的挑战。 #### 核心知识点: 1. **多线程基础**:多线程是Java编程中的一个重要概念,允许程序同时执行多个任务。在...

    java多线程迷宫生成程序

    【Java多线程迷宫生成程序】是一种利用Java编程语言实现的、基于多线程技术的动态迷宫生成示例。这个小程序展示了如何在计算机图形学中应用多线程来实时生成随机迷宫,同时也提供了视觉动画效果,使得观察迷宫生成的...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    java多线程文件传输

    Java多线程文件传输是Java编程中一个重要的实践领域,特别是在大数据处理、网络通信和分布式系统中。在Java中,多线程可以提高程序的执行效率,尤其在处理并发任务时,如大文件的上传、下载和传输。下面将详细探讨...

    java多线程聊天程序

    Java多线程聊天程序是一种基于Socket通信技术设计的网络应用程序,它可以允许多个用户同时与一个服务器进行实时的文本交互。在这个系统中,每个客户端都通过一个独立的线程与服务器进行通信,确保了不同用户之间的...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    JAVA编写的多线程小弹球测试

    总的来说,"JAVA编写的多线程小弹球测试"项目涵盖了Java多线程、GUI编程、随机数生成和颜色处理等多个重要知识点,是学习和实践Java并发编程的好案例。通过这个项目,开发者不仅可以锻炼到编程技巧,还能深入理解...

    Java多线程的聊天室程序

    Java多线程编程是Java语言的一个重要特性,它允许程序中同时执行两个或多个线程来提高程序的执行效率。Java通过java.lang.Thread类或实现java.lang.Runnable接口的方式来创建和执行线程。在多线程环境中,多个线程...

Global site tag (gtag.js) - Google Analytics