Java高并发程序设计-总结

本文详细介绍了Java高并发编程的相关概念,包括同步异步、并发并行的区别、阻塞非阻塞、死锁饥饿活锁等问题。深入探讨了线程的状态、实现方式以及线程间的同步和通信,如wait、notify、synchronized关键字的应用。同时,讲解了Java并发包中的ReentrantLock、CountDownLatch、线程池和并发容器如ConcurrentHashMap的使用。最后,提到了Java8的新特性,如并行流和CompletableFuture,并指出了高并发编程的一些非最佳实践。
摘要由CSDN通过智能技术生成

一,概述

概念辨析

同步异步通常形容方法调用

同步:同步方法一旦开始,调用者必须等到方法调用返回后才能继续

异步:开始之后方法调用立即返回,调用者可以继续后面的的操作,对调用者来说似乎是一瞬间完成的

并发和并行

并发是多个任务交替执行,并行是多个任务同时执行

阻塞和非阻塞:多线程间的相互影响

阻塞:一个线程占用了临界区资源,其他需要这个资源的线程就必须在临界区中等待,导致线程被挂起

非阻塞:线程间不妨碍,所有线程都尝试不断前进

死锁,饥饿,活锁

死锁:都有资源,都要资源,循环等待

饥饿:一个线程一直无法获取想要的资源

活锁:互相谦让不要资源导致都没有拿到

三个并发问题:原子性,可见性,有序性

原子性:一个操作不会被另一个操作干扰。经典例子是两个线程同时对long型整数写入,对线程之间的结果有干扰,高32位和低32位的数据可能会被不同线程同时修改

可见性:一个线程修改变量,其他线程能否立即知道这个修改。比如线程1把一个变量t的值存在cache里,如果线程2修改了变量t,线程1是无法意识到的

有序性:因为存在指令重排,计算机指令流水线的执行为了尽量避免中断会调整一些指令顺序,所以执行的指令和原指令未必相同

二,基础

进程线程

进程:程序分配和调度资源的最小单位,可以理解为“线程的母亲”

线程:程序执行的最小单位,轻量级进程,线程的切换和调度成本远小于进程

线程状态

NEW:刚创建的线程,还没开始执行

RUNNABLE:线程开始执行

BLOCKED:遇到了synchronized同步块,进入阻塞状态

WAITIN:无时限等待

TIMED_WAITING:有时限等待,比如main里用了join()函数,直到该进程结束再继续

TERMINATED:结束

进程实现
继承Thread,Runnable,Callable
Thread的常见用法
1,currentThread():返回当前线程的引用
2,start:开始执行,调用run
3,yield&

Java高并发程序设计是指在Java编程语言中,能够有效地处理大量并发请求的程序设计方法和技巧。 首先,Java高并发程序设计需要利用多线程来处理并发请求。通过创建多个线程来同时处理不同的任务,可以提高程序的并发处理能力。可以使用Java内置的Thread类或者实现Runnable接口来创建多线程,并且可以使用线程池来管理线程的创建和销毁,以提高效率。 其次,Java高并发程序设计需要考虑线程安全性。由于多个线程同时访问共享数据可能会引发数据竞争和不一致的问题,因此需要使用同步机制来确保线程的安全性。可以使用synchronized关键字、Lock接口等来实现线程的同步操作,并保证数据的一致性。 另外,Java高并发程序设计还需要考虑资源管理和性能优化。并发程序往往需要频繁地进行数据读写、线程调度等操作,因此需要合理地管理资源,避免资源的过度竞争和浪费。可以使用线程池来管理线程,并配置合适的线程池大小、线程池参数等来提高程序的性能。 此外,还可以使用非阻塞I/O、异步编程等技术来提高程序的响应速度和并发能力。非阻塞I/O可以减少线程等待的时间,提高I/O操作的效率。异步编程可以减少线程的阻塞时间,提高程序的并发处理能力。 总之,Java高并发程序设计是一门复杂的技术,涉及线程管理、数据同步、资源管理和性能优化等方面。通过合理地使用多线程、同步机制和优化技术,可以提高Java程序的并发处理能力,从而更好地满足大量并发请求的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值