java高并发编程是什么_java-concurrent

java-concurrent

java高并发编程

你应该先了解这些

*1.线程的概念

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

*2.如何启动一个线程

*3.基本的线程同步

并行流水线

并发算法虽然可以发挥多核CPU的性能.但是很不幸的是,并非所有的计算都可以改造成并发的形式.

那么什么样的算法是无法使用并发进行计算的呢?简单来说,执行过程中有数据相关的运算都是无法完美并行化的

假如我们要计算(B+C)*B/2,如果B+C没有执行完成,则永远算不出(B+C)*B,这就是数据相关性.如果线程执行时,所需的数据存在这种依赖关系,

那么就没办法将他们完美的并行化,如果遇到这种情况有没有什么补救措施呢.答案肯定是有的,那就是借鉴日常生产中的流水线思想

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

第一要组装身体.

第二要在身体上安装四肢和头部.

第三给组装完成的玩偶穿上一件漂亮的衣服.

第四就可以包装出货了。

为了加快制作玩具的进度,我们不可能叫四个人同时加工一个玩具,因为这四个步骤有着严重的依赖关系。

如果没有身体,就没有地方安装四肢,如果没有组装完成,就不能穿衣服,如果没有穿上衣服,就不能包装发货。因此,找四个人来做一个玩偶是毫无意义的。

但是,如果你现在要制作的不是1只玩偶,而是1万只玩偶,那情况就不同了。你可以找四个人,第一个人只负责组装身体,

完成后交给第二个人: 第二个人只负责安装头部和四肢,交付第三人: 第三人只负责穿衣服,

并交付第四人: 第四人只负责包装发货。这样所有人都可以一一起工作,共同完成任务,而整个时间周期也能缩短到原来的1/4 左右,

这就是流水线的思想。一旦流水线满载,每次只需要一步(假设一个玩偶需要四步) 就可以产生一个玩偶

看代码com.test.concurrent

并行搜索

搜索几乎每一个软件都必不可少的功能.对于有序数据,通常可以采用二分法查找.对于无序数据,则只能挨个查找.

给定一个数组,我们要查找满足条件的元素,对于串行程序来说,只要遍历一下数组就可以得到结果.但是如果要使用并行的方式,

则需要增加一些线程间的通信机制,使各个线程可以有效地运行.

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值