浅谈Java中的多线程

本文探讨Java中的多线程需求及其代价,介绍同步与异步、并发与并行的区别,并讲解Java实现多线程的方法、线程操作及线程锁。同时,分析可能遇到的线程阻塞、死锁和不安全问题,为多线程编程提供基础理解。
摘要由CSDN通过智能技术生成

为什么需要使用多线程:

在单线程程序中,程序在完成当前指令前就不能做一件事。

举个例子:小王是个单线程的人,有一天,他在接水喝,但是水龙头不出水,小王就只能一直等,等到水杯装满为止才会去做下一件事,比如给自来水公司打电话投诉。

而小李是个多线程的人,他也要接水喝,但是水龙头也一样不出水,于是小李发现这件事花的时间太长了,就去做另一件事,比如写CSDN博客,一边等水龙头出水。

从上面的例子可以看得出,多线程比起单线程可以做更多的事情,譬如同时处理多个任务(如果有多个逻辑处理器的话)。就算只有一个逻辑处理器,也可以更好地安排事情的顺序,同步执行不同的任务,防止被一个任务卡死。

可是,代价是什么:

多个任务间为了沟通,就必须要对在同一个内存空间中的数据进行交流,这就导致难免出现偏差。

举个例子:有A,B,C三个人,和一本公用笔记本,每个人手里也都有一本写着数字的小本子,他们要做的事情,就是共同计算出三个人手里的本子上的数字的总和,然后把新的数字贴在公用笔记本上。于是,A看了眼自己的笔记本,是3,再看了下公用笔记本,是0,就写了个3贴在了公用笔记本上。但是就在A写字的时候,B也看了眼公用笔记本,这时候还是0,而他自己的笔记本上写的是2,但是B的动作没有A快,就在A贴完3后把2给贴在了公用笔记本上,这时候明明正确的计算结果是5,笔记本上却只会记录一个2。

为了解决譬如上面的这个笔记本问题,我

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值