
java 并发编程
文章平均质量分 92
讲述多线程的导致的本质原因和解决方法的底层原理,还有思路
水上冰石
物联网,机器人,系统架构,3d建模,人工智能,aigc,大模型
展开
-
基于管道的线程通信学习笔记
在多线程下,当需要两个线程之间进行数据交互,可以使用管道技术package com.jzg.thinkingInJava.test.ThreadDemo;import java.io.IOException;import java.io.PipedReader;import java.io.PipedWriter;/** * @author 摘抄自《Java并发编程的艺术-第四章并发编程基础-管道输入输出流》 * @version 1.0 * @description 线程数据通信.原创 2020-12-22 19:27:43 · 140 阅读 · 0 评论 -
关于java并发顺序一致性模型的理解
在java并发编程中,由于在没有进行并发控制特殊处理的情况下,一段java源码程序,经过编译器编译成class文件的时候,会对应做jvm层级的优化,包括指令执行顺序等方面;在class文件所对应的jvm指令操作系统底层转换成cpu可以执行的指令的结果,会有cpu缓存,cpu层级指令执行顺序优化,多cpu调度优化等,这会导致一段java源代码的顺序与实际执行的指令顺序是不一致,或者中间会出现中间态数据副本,从而造成数据不一致或指令执行顺序不一致的现象。针对这些问题,情形复杂,为了方便理解这些现象,在并发编原创 2020-12-09 11:01:09 · 237 阅读 · 0 评论 -
java并发编程happens-before规则理解
happens-before 是并发编程里的一个抽象的概念,描述的是两个命令之间的结果的可见性。不是两个命令执行的顺序。可能两个命令执行的顺序是先B,后A,但只要保证A的结果永远早于B的执行之前B能够获取的到,就说A happens-before B这就是说为什么happens-before ,而不是简单用A先于B执行这样的概念来描述这个现象的原因...原创 2020-12-09 09:57:40 · 242 阅读 · 3 评论 -
synchronized关键字的通俗理解
我们知道synchronized是控制线程同步访问的一种机制。当修饰在普通方法的时候,会把普通方法所在的对象作为锁,进行控制。当修饰在静态方法的时候,会把普通方法所对应的类通过反射机制所对应的Class对象作为锁,进行同步访问控制。当修饰在代码块上的时候,会把括号内的对象作为锁,进行同步访问。总结来说,都是把对象作为锁(特殊的Class对象本质上也是对象,只不过是反射机制下,类本身所对应的类信息对象)注意,这里说的是对象本身就是锁,而不是锁住的是对象。为什么这么说呢,因...原创 2020-12-08 12:03:25 · 212 阅读 · 1 评论 -
Java创建线程的四种方式
1.通过Thread类 new Thread2.实现runnable接口 无返回值3.实现Callable接口 有返回值4.通过线程池通过工厂模式创建,本质上还是前三种的使用 四种方式:a:newSingleThreadPoolExecutor b:newFixedThreadPoolExecutor c:newCacheThreadPoolExecutor ...原创 2020-10-13 08:09:11 · 118 阅读 · 0 评论 -
什么是高并发(java为例)
当提到高并发的时候,很多人就有疑问,到底什么是高并发编程?以登录功能为例。当登录的时候,是用户拿用户名,密码到数据库里访问是否存在,存在则跳转到登录页面。然后修改访问次数为+1.否则跳转到失败页面,访问次数不加1.当一个用户进行访问的时候,是不存在并发性问题的。因为用户查询库表,修改访问次数,不会受到别人的影响。但是当两个用户访问的时候,在查询库表的时候,假定两个用户是顺序的。第一个登...原创 2020-04-04 22:00:03 · 2288 阅读 · 0 评论 -
并发编程cas的aba问题
多线程环境下,两个线程A,B可能会对共享数据m进行操作。为了保证一个线程在读到数据跟写入数据之间没有被其他线程修改过,使用cas解决。cas:更改之前先判断旧值是否有变化,如果没有变化,认为没有线程对该共享值做过操作。( 这种认为是有一下问题的, 时线程A线程BT1读m值为1 T2 读m值为1T3原创 2017-06-15 18:22:46 · 443 阅读 · 0 评论 -
java 并发编程-队列同步器AQS了解
队列同步器AbstractQueuedSynchronizer (AQS),是构建锁和其他同步组件的基础框架 内部聚合AQS的锁或同步组件:ReentrantLock(可重入锁),Semphore(信号量), RentrantReadWriteLock(读写锁),CountDownLatch,FutureTask(执行任务类)。 AQS提供模板方法,聚合AQS的类,通过内部类,原创 2017-06-29 16:32:44 · 363 阅读 · 0 评论 -
synchronized关键字详解 --Java并发编程的艺术
1.当synchronized修饰方法时候,锁定的是当前方法所在的对象 2.当synchronized修饰static方法时是,锁定的是当前类的Class对象。 3.当synchronized作用于同步代码块时,锁定的是synchronized(object) 括号里的对象原创 2017-04-26 12:17:26 · 284 阅读 · 0 评论 -
volatile关键字原理
前提:1.带有缓存的cpu执行程序时,会提前将要执行的多条语句存入到缓存中,比如某些架构的cpu拥有3M的L1,L2,L3缓存。 2.带有LOCK前缀的汇编指令,会有两步操作a.将缓存行中的数据回写到系统内存;b.并且写回内存操作会使cpu中其他缓存了该内存地址的数据无效 当用volatile关键字修饰的变量在被JVM返回成汇编语言时,会生成带有Lock前原创 2017-04-26 12:13:34 · 283 阅读 · 0 评论 -
并发编程的艺术-数据库连接池简单实现
1.数据库连接池类 package org.global.fairy.multithread.threadpool;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connectio原创 2017-05-24 13:14:48 · 440 阅读 · 0 评论 -
并发编程实践 -- 笔记
中断通常是实现取消最明智的选择。原创 2015-09-15 14:13:27 · 383 阅读 · 0 评论