代码编织梦想

线程池-爱代码爱编程

1、 什么是线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序 都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 第三:提高线程的可管理性。线程是稀

并发编程 — AtomicBoolean 详解-爱代码爱编程

目录 1、AtomicBoolean 的基本用法 1.1、AtomicBoolean 的创建 1.2、AtomicBoolean 值得更新 2、AtomicBoolean 内幕 3、为什么需要AtomicBoolean 4、如何支持 boolean 类型 AtomicBoolean提供了一种原子性地读写布尔类型变量的解决方案,通常情况下,该类

线程常用的锁-爱代码爱编程

1、悲观锁 悲观锁就是悲观思想,即认为写多读少,遇到并发的可能性高。 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都

线程池(一)线程池的基本使用-爱代码爱编程

一、线程池简介 线程池的概念 线程池就是首先创建一些线相衬,它们的集合称为线程池,使用线程池可以很好的提高性能,线程池在系统启动时既创建大量空闲的线程,程序将一个任务传给线程池。线程池就会启动一条线程来执行这个任务,执行结束后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。 线程池的工作机制 在线程池的编程模式下,任务是提交

java—线程通信--wait()  notify()  notifyAll() 的使用-爱代码爱编程

wait()  notify()  notifyAll() 的使用 package thread; class printer implements Runnable { private int i = 1; @Override public void run() { while(true){

String线程安全性-爱代码爱编程

String StringBuffer 和 StringBuilder 的区别是什么? Java 平台提供了两种类型的字符串:String和StringBuffer / StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer和StringBuil

php swoole的process模块创建和使用子进程-爱代码爱编程

swoole中为我们提供了一个进程管理模块 Process,替换PHP的 pcntl 扩展,方便我们创建进程,管理进程,和进程间的通信。 swoole提供了2种进程间的通信: 1、基于 unix socket 的管道 pipe。 2、基于 sysvmsg 的消息队列。 我们可以通过 new swoole_process() 快速的创建一个进程,默认

7. JUC集合类不安全-爱代码爱编程

目录 *简介List例子*原因解决方案方案一:Vector方案二:Collections方案三:*写时复制Set例子解决方案方案一:Collections方案二:写时复制*HashSet理解Map例子解决方案方案一:Collections*方案二:ConcurrentHashMap*HashMap理解 *简介 集合类在迭代的时候,如果同

初学者练手案例(一) 多线程练习:龟兔赛跑-爱代码爱编程

需求 用两个线程分别模拟乌龟和兔子奔跑。兔子和乌龟的速度不同。两个线程共同跑完总长1000米。同一时间只能有一个在跑,另一个处于休息状态。(兔子和乌龟严格轮流交替跑)当总长度跑完以后,两个线程结束。当两个线程都结束后,打印"到达终点"。分别输出乌龟和兔子奔跑的距离。 分析  1.首先需要确定使用什么方式创建线程,这里我们选用实现Runnable

APUE练习------综合案例exec函数族和dup2函数和pipe函数的结合-爱代码爱编程

案例要求 使用管道来实现兄弟间通信,完成ls | wc -l统计当前目录下文件个数,父进程回收子进程 分析 要使用dup2函数把原本的标准输出改为输出到管道的缓冲区中。 父进程不执行写和读操作,故父进程要把读和写都关闭 代码实现 #include <stdio.h> #include <unistd.h> #include

并发编程11-爱代码爱编程

并发编程11 t1释放锁之后,唤醒t2线程,t2线程从LockSupport.park()处唤醒,继续往下执行Thread.interrupted()并不是打断线程,只是清除打断标记线程打断 sleep、wait、join这种线程如果被打断则会直接清除打断标记 --> 什么是打断标记1.怎么看打断标记? Thread.interrupted()2

Redis的分布式锁-爱代码爱编程

Redis的分布式锁 1. 为什么需要分布式锁2. Redis分布式锁原理2.1 Setnx(key,value)2.2 Redis单线程模型3. 当前模式可能存在问题3.1死锁3.2 运行时异常导致释放锁没有执行3.3 释放了其他进程的锁3.4 改进4. 仍存在问题4.1 续租问题4.2 锁的删除问题5. 解决 redis企业级分布式锁 Redi

Linux-C编程 / 多线程 / 如何终止某个线程?-爱代码爱编程

示例 demo 最简单的 demo: static void* thread1_func(void *arg) {     int i = 0;     // able to be cancel     pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);     pthread_setcan

面试官:说说CountDownLatch,CyclicBarrier,Semaphore的原理?-爱代码爱编程

CountDownLatch CountDownLatch适用于在多线程的场景需要等待所有子线程全部执行完毕之后再做操作的场景。 举个例子,早上部门开会,有人在上厕所,这时候需要等待所有人从厕所回来之后才能开始会议。 public class CountDownLatchTest {     private static int num = 3

使用 guava-retrying 实现灵活的重试机制-爱代码爱编程

我们的后端业务系统可能会出现接口调用失败、网络拥塞超时、任务执行失败、系统错误等异常情况,需要进行重试操作。但某些场景下我们对重试有特殊要求,比如延迟重试、降频重试等,此时自己编写重试代码会很繁琐,在 Java 中,可以使用 guava-retrying 帮我们实现灵活的重试机制。 guava-retrying 简介 guava-retrying

框架篇:见识一下linux高性能网络IO+Reactor模型-爱代码爱编程

我的新课《C2C 电商系统微服务架构120天实战训练营》在公众号儒猿技术窝上线了,感兴趣的同学,可以长按扫描下方二维码了解课程详情: 课程大纲请参见文末 文章转载:https://juejin.cn/post/6892687008552976398 前言 网络I/O,可以理解为网络上的数据流。通常我们会基于socket与远端建立一

C 线程的创建-爱代码爱编程

前言 线程创建很容易,直接调用std::thread,就创建一个新线程了。该线程拿到任务后立即开始执行。线程的创建者(父线程)必须管理创建的线程(子线程),应该等到子线程完成其任务或者让子线程从自己身上脱离。子线程可以通过复制或引用获取任务执行的参数。 创建和执行线程

Android开发之手写Glide图片加载/缓存 框架-爱代码爱编程

挥舞着指尖,谱写指尖的艺术 声明 这次的手写Glide图片缓存框架,并不是引入Glide三方,对其进行自定义配置;而是自己实现一个类似Glide图片加载框架。 附带源码下载地址,文末有地址。 Glide三方框架的特点 Glide生命周期跟随Context生命周期-生而生-灭而灭;内部图片编码采用RGB_565,图片唯一key由

一个JDK线程池BUG引发的GC机制思考-爱代码爱编程

点击上方蓝色“程序猿DD”,选择“设为星标” 回复“资源”获取独家整理的学习资料! 作者 | 空无 来源 | https://segmentfault.com/a/1190000021109130 问题描述 前几天在帮同事排查生产一个线上偶发的线程池错误 逻辑很简单,线程池执行了一个带结果的异步任务。但是最近有偶发的报错: java

JAVA并发编程学习笔记07-死锁-爱代码爱编程

JAVA并发编程学习笔记07-死锁 什么是死锁如何避免死锁方法1:按相同顺序加锁方法2:设置过期时间 什么是死锁 由于直接将synchronized关键字加在方法上,会造成同步代码区域过广,导致并发效率很低,故往往会优化只加尽可能少的代码块,减少锁的粒度,但也因此会出现死锁的情况。 @Slf4j public class Test03 {