java多线程学习之二——多线程的优势和风险

本文探讨了多线程编程的优势,包括提高系统吞吐率、响应性和资源利用率,简化程序结构;同时也指出了存在的风险,如线程安全问题、死锁及上下文切换带来的系统消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优势:

1、  提高系统的吞吐率。多线程编程使得一个进程中可以有多个并发的操作。例如:一个线程因为I/O操作而处于等待时,其他线程仍然可以执行其操作。

2、  提高响应性。使用多线程编程的情况下,对于GUI软件(桌面应用程序)而言,一个慢的操作并不会导致软件的界面出现被“冻住”的现象而无法响应其他用户的其他操作。

3、  充分利用多核CPU资源。避免资源浪费。

4、  最小化对系统资源的使用。一个进程中的多个线程可以共享其所在进程所申请的资源。

5、  简化程序的结构。

6、多线程是异步的。

风险:

1、  线程安全问题。多个线程共享数据的时候,如果没有采取相应的并发访问措施,那么就会产生数据一致性的问题,如读取脏数据(过期的数据)、丢失更新(更新被覆盖)等。

2、  线程的生命特征问题。代码编写不适当可能导致某些线程一直处于等待其他线程释放锁的状态,即产生了死锁。例如:线程T1拥有锁L1,并试图去获得锁L2,而此时线程T2用户拥有锁L2而试图是获得锁L1,这就导致线程T1和T2一直处于等待对方释放锁而一直又得不到的状态。等等。

3、  上下文切换。多线程编程的必然副产物,增加了系统的消耗,不利于系统的吞吐率。

4、  可靠性。一方面有利于可靠性,例如:某个线程意外终止了,但这并不影响其他线程继续其处理。另一方面,线程是进程的一个组件,它总是存在于特定的进程中的,如果这个进程由于某种原因意外提前终止了,比如某个java进程由于内存泄漏导致JVM崩溃,那么该进程中的所有线程也就随之而无法继续运行。

此外,sonar 检查代码有一类错误就是使用线程安全的类引起的:Synchronized classes Vector, Hashtable, Stack and StringBuffer should not be used。同步类Vector, Hashtable, Stack和StringBuffer不应该使用。告诉我们,jdk提供的加锁api需要慎用。

多线程有风险,用之需谨慎!

参考:

《java多线程编程实战指南》黄文海

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伍六七AI编程

你猜你给我1分我要不要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值