多线程
文章平均质量分 91
呆东
小菜鸡也有大梦想,努力拼搏,就是为了给那些曾经看轻你的人一记响亮的耳光
展开
-
并发编程的Bug源头与解决思路
因为现代计算机中CPU、内存、I/O操作存在性能差异问题,而一个程序的完整执行往往需要CPU、内存、I/O操作共同完成;例如进行I/O操作时,此时CPU就是空闲状态,浪费其性能,所以需要通过并发程序来提升硬件设备的使用率,提高程序性能。bug源头一:缓存导致的可见性问题现代计算机多核CPU都是标配,普通个人电脑4核、8核都很常见,更不用现代服务器的16核、32核等。因为每个CPU都有自己的高速缓存(1、2、3级缓存),这就会导致我们的线程在处理共享变量时,因为操作的数据在各自CPU的高速缓存中,导致可见原创 2021-08-02 21:27:59 · 940 阅读 · 0 评论 -
java高并发之——线程池
一、什么是线程池为了避免系统频繁地创建和销毁线程,让创建出来的线程可以进行复用,这时就可以使用线程池,在线程池中,长期保持几个线程处于激活状态,当需要使用线程的时候,不在是直接创建线程,而是去线程池中拿取可用线程进行操作;反正,完成操作后,不需要去销毁线程,而是将线程放回线程池中。即总结来说:使用线程池后,创建线程变成从线程池中拿取线程,销毁线程变成了向线程池中归还线程。二、java中线程...原创 2019-03-27 23:40:49 · 209 阅读 · 0 评论 -
java高并发之 —— 编发编程的Bug源头
我们知道并发编程比串行程序复杂的多,因为在并发程序下数据访问要保持一致性和安全性,这里就要提出一个临界区的概念!什么是临界区呢?临界区就是用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待,也就是多在同一个时刻,只能有一个线程对其进行操作,并且还要保证线程对其操作后,其他线程在操作时,要保证安全。这...原创 2019-04-01 23:26:44 · 253 阅读 · 0 评论 -
java高并发之 —— 解决编发编程中的原子性、可见性和有序性
一、如果保证程序的原子性——锁在程序开发中,我们如何才能保证一个程序的原子性是非常的重要的,保证程序原子性性,可以有效的避免在多线程过程中,出现的诡异bug。那在java程序中如果保证程序的原子性呢?也就是保证当前方法在同一时刻只能有一个线程对其进行操作,多线程在执行的时候,进行同步操作。java自带的隐式加锁方法就是使用synchronized关键字。synchronized关键字可以用...原创 2019-04-12 00:39:53 · 241 阅读 · 0 评论 -
java高并发之——synchronized和重入锁(ReentrantLock)
一、重入锁的定义:为什么会叫重入锁,顾名思义,表示这个锁可以返回被添加,就是一个线程可以多次获得一把锁,只要在最后的时候做相同次数的锁释放即可。Lock lock = new ReentrantLock();lock.lock();lock.lock();try { //业务代码} finally { lock.unlock(); lock.unlock();...原创 2019-04-24 23:43:02 · 593 阅读 · 0 评论