浅析多线程编程对程序的性能提升

目录

1. 前言
2. 串行、并发与并行
3. 单线程编程与多线程编程
4. IO密集型程序与CPU密集型程序
5. 实例:利用多线程提升累加程序的性能
    (1)功能描述
    (2)多线程优化思路
    (3)代码实现
    (4)测试结果

1、前言

最近在巩固java多线程编程相关的知识,并且做了一些实验。

今天就用这一篇文章来总结下最近所学到的关于多线程编程方面的知识点,并且用一个实例来具体说明问题。……

阅读更多

排序算法:希尔排序(更高效的插入法排序)

希尔排序:
      希尔排序,英文名Shell Sort,又被称为缩小增量排序。无论是中文名,英文名,还是别名,都透露着一股学渣不可侵犯的“神圣”感。当初学习插入法的时候,一看到这么接地气的名字,学起来也有信心。但是看到希尔排序这高端大气上档次的名字,一下子就起了退避三舍的心思。那么,希尔排序真的就这么的拒人于千里之外吗?其实学会了希尔排序的思路后,就不觉得它有多难了。

      希尔排序其实也是插入排序的一种,不过希尔排序是将序列按下标的一定增量分组,分别对每组序列……

阅读更多

排序算法:二分法插入排序

二分法插入排序:
      在上一篇文章排序算法:插入排序中,介绍了插入排序。其中,插入排序的“插入”二字体现于在寻找有序区间[R0,Ri-1]内第一个比Ri小的Rx,然后将Ri插入Rx之后,如果Ri>Ri-1,那正好,Ri不需要再与有序区间的其他元素比较。
      二分法插入排序沿用了插入排序的思路,而且由于[R0,Ri-1]是有序序列,在寻找Ri的插入位置时,可以采用二分查找法搜索有序区间中比第一个Ri小的元素,这样就减少了比较次数,提高了插入排序算法的性能。

以长……

阅读更多

排序算法:插入排序

插入排序思路:
      对于长度为n的序列来说,在插入元素Ri(i=1,2,…,n-1)时,序列被划分为两个区间,分别是[R0,Ri-1]和[Ri,Rn-1],其中[R0,Ri-1]已经排好序,即Ri-1>=Ri-2>=…>=R0,而[Ri,Rn-1]为待排序列。将Ri分别与Ri-1,Ri-2,…,R0比较,当Ri<=Rx时,将Ri插入Rx之前(若Ri>=Ri-1,则Ri不需要移动位置)。此时有序序列的区间元素又增加一位。当从i=1进行上述排序操作知道i=n-1时,序列将变为有序。

以长度为6的序列 {6,3,5,4,……

阅读更多

排序算法:选择排序

选择排序思路:
      每次从序列中选取最小的元素与序列前端的元素交换,依次类推,对于长度为n的序列,进行n-1趟排序后序列将变为有序。
      由于每趟排序过程中,都是比较完成后才进行交换,所以选择排序的交换次数为n-1次,如果考虑到最小元素可能就是当前元素无需交换,则选择排序的交换次数<=n-1。

以长度为6的序列 {6,3,5,4,1,2} 的选择排序过程做示范:
第一趟排序:[1] 3 5 4 6 2 (最小元素1与6交换)
第二趟排序:[1 2]……

阅读更多

排序算法:冒泡排序

冒泡法排序思路:
      先将序列中的第一个记录R1与第二个记录R2比较,若R1>R2,则把R1,R2交换位置,然后处理新的R2,R3,直到Rn-1和Rn也做了上述操作,此时就完成了一趟排序,由上述的操作可知,最大的记录将被交换的第n位上。在执行下一趟排序时,因为前一趟排序已将序列最大值排到最后,所以只需进行n-1次比较,即将第二大的记录交换到第n-1位。依次类推,直到做完n-1趟比较,序列将变为有序序列。
      由于上述的排序过程中,越大的元素会经由交换慢慢“浮”到……

阅读更多

spring+springMVC+jQuery+Ajax+Mysql环境搭建实例

本文记录如何使用MyEclipse搭建Spring+SpringMVC+jQuery+Ajax+Mysql,形成一个简易的Web应用框架。有图有代码,有运行结果。
本文使用到的jar包已经上传到csdn
下载地址为:spring+springMVC+mysql+JSON_jar包整合

本文的使用的到基础环境:

  • MyEclipse10
  • Mysql5.6.21
  • Tomcat8

1 数据库准备

1.1 建库

打开cmd控制台,在控制台登录进入mysql控制界面,查看当前已有的数据库。

输入建库命令:create database springtest;……

阅读更多

Servlet:Servlet基础之HelloWorld

Servet是运行在服务器端的用于响应客户端请求的java对象。动态Web应用的原理就是基于请求-响应模式,而Servlet就是为请求-响应模式服务的。下面来看一个Servlet的helloworld小项目。

本文使用的IDE是MyEclipse,可能会和Eclipse有一些小出入,不过没有太大影响。
首先新建一个Dynamic Web Project(动态Web应用项目)。

项目名称为FirstServlet,运行环境这里我选择的是自己安装的Tomcat8.0,其实也可以使用Myeclipse自带的Tomcat或者自己安装的别的Tomcat版本。

点击next,在该页面选择自动生成……

阅读更多

设计模式:简单工厂模式

场景:使用面向对象语言设计一个简单计算器,要求输入两个数以及操作符,输出计算结果。

项目结构图如下:

项目分为了四个部分,MainClass作为客户端,负责用户输入、工程方法调用和结果输出;CalculatorFactory作为工厂类,向用户端提供运算类的对象;CalculatoryName是枚举,由于switch/case在jdk7之前都不支持String,所以这里用枚举作为switch的选择变量;ICalculator是抽象的运算类接口,AddCalculator、SubCalculator、MulCalculator、ExcCalculator分别为加、减、乘、除四种运算类的实现。……

阅读更多