Watch 1 Star 0 Fork 0

zeli / java-concurrent JavaApache-2.0

Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
java高并发编程. spread retract

Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

博客地址

java-concurrent

java高并发编程

你应该先了解这些

*1.线程的概念

线程:本人通俗理解一个程序里头不同的执行路径可以放在不同的cpu里面同步运行

*2.如何启动一个线程

*3.基本的线程同步

*4com.test包对应的博客地址

并行流水线

并发算法虽然可以发挥多核CPU的性能.但是很不幸的是,并非所有的计算都可以改造成并发的形式.
那么什么样的算法是无法使用并发进行计算的呢?简单来说,执行过程中有数据相关的运算都是无法完美并行化的
假如我们要计算(B+C)*B/2,如果B+C没有执行完成,则永远算不出(B+C)*B,这就是数据相关性.如果线程执行时,所需的数据存在这种依赖关系,
那么就没办法将他们完美的并行化,如果遇到这种情况有没有什么补救措施呢.答案肯定是有的,那就是借鉴日常生产中的流水线思想

比如,现在要生产一批小玩偶。小玩偶的制作分为四个步骤

  1. 第一要组装身体.
  2. 第二要在身体上安装四肢和头部.
  3. 第三给组装完成的玩偶穿上一件漂亮的衣服.
  4. 第四就可以包装出货了。

为了加快制作玩具的进度,我们不可能叫四个人同时加工一个玩具,因为这四个步骤有着严重的依赖关系。 如果没有身体,就没有地方安装四肢,如果没有组装完成,就不能穿衣服,如果没有穿上衣服,就不能包装发货。因此,找四个人来做一个玩偶是毫无意义的。 但是,如果你现在要制作的不是1只玩偶,而是1万只玩偶,那情况就不同了。你可以找四个人,第一个人只负责组装身体, 完成后交给第二个人: 第二个人只负责安装头部和四肢,交付第三人: 第三人只负责穿衣服, 并交付第四人: 第四人只负责包装发货。这样所有人都可以一一起工作,共同完成任务,而整个时间周期也能缩短到原来的1/4 左右, 这就是流水线的思想。一旦流水线满载,每次只需要一步(假设一个玩偶需要四步) 就可以产生一个玩偶

看代码com.test.concurrent

并行搜索

搜索几乎每一个软件都必不可少的功能.对于有序数据,通常可以采用二分法查找.对于无序数据,则只能挨个查找. 给定一个数组,我们要查找满足条件的元素,对于串行程序来说,只要遍历一下数组就可以得到结果.但是如果要使用并行的方式, 则需要增加一些线程间的通信机制,使各个线程可以有效地运行.

看代码com.test.concurrent1并行搜索

Comments ( 3 )

Sign in for post a comment

Java
1
https://gitee.com/zhangzeli/java-concurrent.git
git@gitee.com:zhangzeli/java-concurrent.git
zhangzeli
java-concurrent
java-concurrent
master

Search