
多线程
卧虫呀
这个作者很懒,什么都没留下…
展开
-
Spring事务管理下synchronized锁失效问题
最近看到一个技术技术问题:synchronized锁问题?开启10000个线程,每个线程给员工表的money字段【初始值是0】加1,没有使用悲观锁和乐观锁,但是在业务层方法上加了synchronized关键字,问题是代码执行完毕后数据库中的money 字段不是10000,而是小于10000 问题出在哪里?Service层代码:SQL代码(没有加悲观/乐观锁):用1000个线程跑代码:简单来说:多线程跑一个使用synchronized关键字修饰的方法,方法内操...原创 2020-07-01 23:30:09 · 3571 阅读 · 3 评论 -
线程有哪些基本状态?
先来简述一下线程、程序、进程的基本概念。以及他们之间关系是什么?线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行原创 2020-06-17 14:12:16 · 876 阅读 · 0 评论 -
volatile关键字
首先看一下Java内存模型在 JDK1.2 之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,就需要把变量声明为volatile,这就指示 JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。说白了,vo.原创 2020-06-24 15:27:32 · 130 阅读 · 0 评论 -
synchronized 关键字
synchronized 关键字底层原理属于 JVM 层面,下面来简单看一下他的工作原理① synchronized 同步语句块的情况public class SynchronizedDemo { public void method() { synchronized (this) { System.out.println("synchronized 代码块"); } }}通过 JDK 自带的 javap 命令查看 SynchronizedDemo 类的相关字节码信息:首原创 2020-06-24 15:24:25 · 161 阅读 · 0 评论 -
线程池
为什么要用线程池?线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。这里借用《Java 并发编程的艺术》提到的来说一下使用线程池的好处:我们以**AbstractExecutorService**接口中的一个submit方法为例子来看看源代码: public Future<?> submit(Runnable task) { if (task == null) throw new Nul...原创 2020-06-24 16:57:59 · 171 阅读 · 0 评论