多线程
多线程
韩运畅
这个作者很懒,什么都没留下…
展开
-
数据同步任务:binlog方案与消息队列方案对比
binlog方案原理优点方案简洁,mysql端发生数据变更后只需要将对应日志发送给接收端,不必考虑数据一致性问题。缺点是否能够过滤掉不必同步的数据有待考察只支持监听消息变更,不支持将原有数据进行同步消息队列方案优点可以支持全量同步与增量同步,在原系统不涉及分布式事务的情况下,实现较为简单。另外该方案原生就可以自主选择监听哪些表的变更。缺点需要考虑数据一致性问题(可将dml语句与消息的发送放在一个事务中解决,但是如果系统支持分布式事务则更加复杂);使用到消息队列需要考虑消息的重复(消原创 2021-02-20 14:26:09 · 837 阅读 · 0 评论 -
并发三特性(线程安全三特性)
为什么会提出这三个特性呢,就是说,如果某段代码不满足 原子性/可见性/有序性 那么就可能产生并发安全问题。原子性(我的理解):对于代码段,一次只允许一个线程执行可见性:变量被修改后,对其他线程立马可见有序性:代码禁止重排序违反原子性举例:首先我们保证可见性和有序性i++;多个线程同时执行上述操作违反可见性举例:if(i<0){ i++;}首先我们包证有序性和这块代码的原子性,即一次只允许一个线程执行。初始时,i=-1,线程A执行代码块,结果i变成0了,紧接着线程B执行原创 2020-11-29 20:03:47 · 351 阅读 · 0 评论 -
ThreadLocal原理
线程本地变量,方便于同一线程内多个方法之间共享变量,同时可以避免其他线程访问到该变量。ThreadLocal对象最主要的方法就是set和get方法,其中set方法首先会获得当前线程然后拿到当前线程的threadLcoals变量,以当前threadLocal对象为key插入。get同理...原创 2020-11-27 19:04:24 · 137 阅读 · 0 评论 -
关于CachedThreadPool为何使用SynchronousQueue的思考
背景知识;CachedThreadPool:核心线程数为0,最大线程数为Integer.MAXVALUE。cache是指的线程。CachedThreadPool应对的是并发数高低非常不稳定的情景,所以核心线程数为0,最大线程数设置的非常大。SynchronousQueue:是一个不存储数据的阻塞队列,每个take必须等待一个put 操作,反之每个put必须等待一个take 操作如下图问题:CachedThreadPool为何使用的是SynchronousQueue?试想如果使用一定长度的Ar原创 2020-10-30 22:01:22 · 1995 阅读 · 6 评论 -
volatile can make common varibles visible before volatile for different threads
The Java Memory model is defined as a set of happens before rules. With a happens before rule you get the guarantee that if ‘a happens before b’ than ‘b will see the effects of a’.So imagine we would have the following code:int a;volatile int b;void f原创 2020-05-23 17:58:02 · 66 阅读 · 0 评论 -
ThreadPoolExecutor,ExecutorService,Executors之间的关系
public class ThreadPoolExecutor extends AbstractExecutorService {public abstract class AbstractExecutorService implements ExecutorService {原创 2020-05-21 21:04:31 · 771 阅读 · 0 评论 -
典型的线程池工作者线程结构
public void run(){ Throwable thrown=null; try{ while(!isInterrupted) runnableTask.run(); }catch (Throwable e){ thrown=e; }finally { threadExit(this,thrown); } ...原创 2020-05-21 17:40:21 · 107 阅读 · 0 评论 -
一个线程被创建时可以拿到外部的哪些对象/数据
1.所有类的静态变量(普通变量和对象都可以,前提是访问权限内的)2.创建该线程所在方法的对象public class TestVaribale { private static int y=0; int x=0; Object obj2; public static void main(String[] args) { int p=0; final Object obj=new Object(); new Thread(ne原创 2020-05-21 16:47:09 · 227 阅读 · 0 评论 -
Actor模型
actor模型是一种并发模型,它share nothig。各线程通过消息传递进行协作,每个线程被称为一个actor。原创 2020-05-01 16:03:34 · 107 阅读 · 0 评论 -
线程间共享的资源
线程间共享的资源:1.进程代码段2.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)3.进程打开的文件描述符4.进程的当前目录5.进程用户ID与进程组ID.........原创 2020-04-25 10:56:33 · 215 阅读 · 0 评论 -
线程上下文切换
线程上下文切换什么时候会发生上下文切换?按导致上下文切换的因素划分,可将上下文切换分为两点:自发性上下文切换非自发性上下文切换自发性上下文切换指线程由于自身因素导致的切出。通过调用下列方法会导致自发性上下文切换:Thread.sleep()Object.wait()Thread.yeild()Thread.join()LockSupport.park()等非自发性上下文切...原创 2020-04-25 10:53:13 · 468 阅读 · 0 评论 -
Runnable、Thread、Callable的区别
线程实现的方式及区别:Runnable、Thread、Callable实现 Runnable 接口相比继承 Thread 类有如下优势 1)可以避免由于 Java 的单继承特性而带来的局限 2)增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的 3)线程池只能放入实现 Runable 或 Callable 类线程,不能直接放入继承 Thread 的类实现 Runnable 接...原创 2020-04-25 10:52:00 · 1026 阅读 · 0 评论 -
java并发之线程池
Java 中有几种线程池?普通线程池 ThreadPoolExecutor定时线程池 ScheduledThreadPoolExecutor线程池架构轮廓:Worker继承了AQS,其他四个各自代表一种拒绝策略ThreadPoolExecutor的两种执行方式的区别:Submit 和 execute 方法1、有返回值和无返回值2、Task 不一样 futuretas...原创 2020-02-10 22:47:25 · 88 阅读 · 0 评论