问题 一段老代码,两个线程,一个线程调用sem_wait等待信号量,另外一个线程在某失败分支会调用sem_init清信号量,结果导致sem_wait线程无法被唤醒: 分析 Linux manpage 从描述中可见,初始化一个已经被初始化的信号量会导致未定义行为: NAME sem_init - initialize an unnamed semaphore SYNOPSIS #include <semaphore.h> int sem_init(sem_t *sem, int pshared,…
FeignClient spi 调用 短路异常 & 线程池配置 默认配置见:HystrixThreadPoolProperties 线程池对象:com.netflix.hystrix.HystrixThreadPool 1. 问题 最近项目中使用FeignClient 调用公共消息服务的spi时候,突然出现了一下错误: MessageSpi.sendMessage could not be queued for execution and fallback disabled. 然后很快出现了短路…
一.前言 在多线程的场景下,我们会经常使用加锁,来保证线程安全.如果锁用的不好,就会陷入死锁,我们以前可以使用Object的wait/notify来解决死锁问题.也可以使用Condition的await/signal来解决,当然最优还是LockSupport的park/unpark.他们都是解决线程等待和唤醒的.下面来说说具体的优缺点和例子证明一下. 二.wait/notify的使用 1. 代码演示 public class JUC { static Object lock = new Obje…