随笔分类 - java基础 / 多线程
摘要:前言 深入理解锁机制 一、学习 并发编程系列 - ReadWriteLock 重入锁(ReentrantLock)和读写锁(ReentrantReadWriteLock) Java 中的Lock锁对象(ReentrantLock/ReentrantReadWriteLock)详解 二、应用实例
阅读全文
摘要:前言 关键词:多线程、高并发、超发、悲观锁、乐观锁。 1、本文旨在介绍什么是高并发?(同时有多个请求) 2、什么是超发?(其实就是在高发场景下产生的数据读取错误) 3、高并发与多线程的关系? 4、现在接触过的并发与多线程。 一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功
阅读全文
摘要:前言 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在 Java 中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。 如果并发
阅读全文
摘要:一、ThreadLocal源码剖析 ThreadLocal源码剖析 ThreadLocal其实比较简单,因为类里就三个public方法:set(T value)、get()、remove()。先剖析源码清楚地知道ThreadLocal是干什么用的、再使用、最后总结,讲解ThreadLocal采取这样
阅读全文
摘要:一、懒汉式单例多线程模式 1、创建模拟的servlet生成器 package cn.bjsxt.sing; import java.util.UUID; public class LszySingleton { //servlet不建议使用成员变量 // 给当前的servlet定义成员变量 // S
阅读全文
摘要:前言 死锁单独写一篇文章是因为这是一个很严重的、必须要引起重视的问题。这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只要在这数十亿次操作中只要有一次发生了错误,就可能导致程序中发生死锁,并且即使通过压力测试也不可能找出所有潜
阅读全文
摘要:同步静态方法 synchronized还可以应用在静态方法上,如果这么写,则代表的是对当前.java文件对应的Class类加锁。看一下例子,注意一下printC()并不是一个静态方法: public class ThreadDomain25 { public synchronized static
阅读全文
摘要:synchronized同步代码块 用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间。这种情况下可以尝试使用synchronized同步语句块来解决问题。看一下例子: public class ThreadD
阅读全文
摘要:前言 1、理解同步关键词synchronized 2、同步方法与同步代码块的区别 3、理解锁的对象this 脏读 一个常见的概念。在多线程中,难免会出现在多个线程中对同一个对象的实例变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过的。 多线程
阅读全文
摘要:前言 在认识多线程(一)中,我们举过一个关于同步应用的例子。说的是生产者与消费者。我们知道了线程与线程之间是存在通信的。在这篇博文中,将详细介绍什么是生产者/消费者模型。 什么是生产者/消费者模型 一种重要的模型,基于等待/通知机制。生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入
阅读全文
摘要:有新理解持续更新 轮询 线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作。 想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000就打印出i,怎么处理?一个办法就是,B线程while(i == 10000),这样两个线程之间就有了
阅读全文
摘要:1、异常原因及解释 首先你要了解这个异常为什么会抛出,这个异常会在三种情况下抛出:1>当前线程不含有当前对象的锁资源的时候,调用obj.wait()方法;2>当前线程不含有当前对象的锁资源的时候,调用obj.notify()方法。3>当前线程不含有当前对象的锁资源的时候,调用obj.notifyAl
阅读全文
摘要:1、start() start()方法的作用讲得直白点就是通知"线程规划器",此线程可以运行了,正在等待CPU调用线程对象得run()方法,产生一个异步执行的效果。通过start()方法产生得到结论,先看下代码: /** * @author zs * @date 2019/9/20 10:13 */
阅读全文
摘要:卷首语 欲练此功,不必自宫。 不保证不粘贴,不复制,但保证,每句话都是自己的理解。 前言 要学习并应用多线程,线程池的知识,首先得认识什么是线程,然后才是为什么要用多线程?程序在不用多线程的情况下,可以正常开发,运行,肯定没必要。一定是在工作,开发的过程中,接触到了,你才会去学习它。 我们必须得承认
阅读全文