Ydoing的专栏

想认识志同道合朋友,请加微信号: csuxajy

ThreadPoolExecutor源码剖析的一些思考和总结

最近迁移一个项目,涉及到线程池的问题。特意看了一下ThreadPoolExecutor源码,记录一下。思考几个问题ThreadPoolExecutor的基本实现思路是什么? - 在线程池正在运行(running)的状态下,提交任务到线程池以后,如果线程数量小于corePoolSiez,则创建新的...

2017-06-05 17:54:33

阅读数 578

评论数 0

Java中sleep和wait有什么区别?

sleep和wait有什么区别?大家都说是sleep不会释放锁,wait会释放锁。一直都不是很理解。最近在看AQS代码,才找到一些蛛丝马迹。AQS的await和wait实现思想类似,释放当前占有的锁,让其他线程继续获取锁。等适合机会唤醒后再重新占有锁。await方法有fullyRelease的方法...

2017-03-05 16:08:41

阅读数 897

评论数 0

从ReentrantLock去分析AbstractQueuedSynchronizer

在并发中,锁是一个重要的工具,能帮助程序处理好数据并发处理不一致的问题,而AbstractQueuedSynchronizer在其中扮演中重要的角色。在设计所锁的时候,应该思考怎么锁能解决什么问题,而这个问题本质是由于什么原因引起。并发问题说到底是由于资源共享竞争使用引起的。锁就是为了防止资源不合...

2017-03-04 18:06:06

阅读数 364

评论数 0

Java线程安全详细总结

以下是我的PPT文档,不知道怎么复制到博客,只能一个一个插入图片发上来了。感觉总结的不错,分享一下。

2016-05-20 22:13:02

阅读数 467

评论数 0

Guava中并发ListenableFuture使用

最近在项目中要优化接口,发现guava并发编程中的ListenableFuture比较适合,所以就用上了。感觉还不错,分享一下。使用场景是这样的,客户端需要上传数据到服务端,涉及到几个表的插入。之前都是一个一个表插入的,性能不是很好的。现在改为并发插入,代码如下:private Listening...

2016-05-19 14:28:10

阅读数 5298

评论数 2

Java并发编程学习路线图

思维导图如下:

2016-05-18 10:08:31

阅读数 1638

评论数 0

Java线程安全策略

不可变 final 事实不可变 如String 无状态 没有实例域 如Servlet volatile 运算结果不依赖当前变量值 不参与不变性约束 如AQS的state 线程封闭 线程栈内私有,方法中局部变量的使用 ThreadLocal,相当月MapJ.U.C工具包 以Concurrent前缀的...

2016-04-23 16:51:32

阅读数 781

评论数 0

Java并发编程类学习总结

线程的定义Runnable定义线程的接口,只有一个run()方法,而且没有返回值。一般通过实现这个接口来定义线程。public interface Runnable { public abstract void run(); } 经常可以用匿名内部类实现: new Threa...

2015-12-25 17:23:34

阅读数 562

评论数 0

Java并发编程类学习五(同步工具)

内置锁(synchronized)每个Java对象都对应有一个内置锁。有两种方式:第一种直接修饰方法;第二种synchronized后跟加锁的对象。 示范: public synchronized void doSomething(Object obj){ synchron...

2015-12-25 17:22:34

阅读数 427

评论数 0

Java并发编程类学习四(线程安全的类)

同步容器类Vector和Hashtable是重量级线程安全的,不建议使用。另外还可以用Collections.synchronizedXXXX工厂方法同步类。并发容器ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque、Conc...

2015-12-25 17:21:35

阅读数 386

评论数 0

Java并发编程类学习三(线程的执行)

Executor任务运行的执行器。可以解耦任务提交和计算的过程。换句话说,只管提交给执行器执行,而不用关系执行的内部过程。 任务被提交后是立即执行的。public interface Executor { void execute(Runnable command); } Executo...

2015-12-25 17:20:14

阅读数 404

评论数 0

Java并发编程类学习二(线程的包装)

线程的包装可以用这些类对线程进行包装,获取线程的运行的状态。Future表示异步计算处理后的结果。可以检查计算是否完成,是否可以取消。get()方法将一直阻塞等到计算的完成才返回结果。public interface Future<V> { boolean cancel(bo...

2015-12-25 17:18:57

阅读数 355

评论数 0

Java并发编程类学习一(线程的定义)

Runnable定义线程的接口,只有一个run()方法,而且没有返回值。一般通过实现这个接口来定义线程。public interface Runnable { public abstract void run(); } 经常可以用匿名内部类实现: new Thread(new...

2015-12-25 17:17:26

阅读数 449

评论数 0

Python进程分支fork和exec详解

在python中,任务并发一种方式是通过进程分支来实现的.在linux系统在,通过fork()方法来实现进程分支. - fork()调用后会创建一个新的子进程,这个子进程是原父进程的副本.子进程可以独立父进程外运行. - fork()是一个很特殊的方法,一次调用,两次返回. - fork()...

2015-04-07 10:52:52

阅读数 2762

评论数 0

Java并发编程之栅栏(CyclicBarrier)详解

栅栏类似闭锁,但是它们是有区别的. 闭锁用来等待事件,而栅栏用于等待其他线程.什么意思呢?就是说闭锁用来等待的事件就是countDown事件,只有该countDown事件执行后所有之前在等待的线程才有可能继续执行;而栅栏没有类似countDown事件控制线程的执行,只有线程的await方法能控制...

2015-03-17 10:25:41

阅读数 6978

评论数 1

Java并发编程之volatile变量

volatile提供了弱同步机制,用来确保将变量更新通知到其它线程。volatile变量不会被缓存在寄存器中或者对其它处理器不可见的地方,因此在读取volatile变量时总会返回最新写入的值。可以想象成如下语义,然而volatile是更轻量级的同步机制。volatile只能确保可见性,但不能保证原...

2015-03-14 16:53:12

阅读数 588

评论数 0

Java并发编程之闭锁CountDownLatch简介

闭锁相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭着的,没有任何线程可以通过,当到达结束状态时,这扇门才会打开并容许所有线程通过。它可以使一个或多个线程等待一组事件发生。闭锁状态包括一个计数器,初始化为一个正式,正数表示需要等待的事件数量。countDown方法递减计数器,表示一个事件已经...

2015-03-13 07:54:33

阅读数 1031

评论数 0

Java并发编程之ThreadLocal类详解

ThreadLocal类可以理解为ThreadLocalVariable(线程局部变量),提供了get与set等访问接口或方法,这些方法为每个使用该变量的线程都存有一份独立的副本,因此get总是返回当前执行线程在调用set时设置的最新值。可以将ThreadLocal视为 包含了Map对象,保存了特...

2015-03-12 21:39:49

阅读数 506

评论数 0

Java多线程并发编程之变量

编写线程安全需要关心的: 共享的变量 可变的变量 共享意味着多个线程可以同时访问,可变意味着其值在生命周期可以改变。 例如以下count 变量: //线程不安全的类public class UnsafeCount {    private int co...

2015-03-12 09:49:48

阅读数 999

评论数 0

Java多线程并发编程之构建自定义同步工具

当Java类库没有提供适合的同步工具时,就需要构建自定义同步工具。 可阻塞状态依赖操作的结构 acquir lock on object state;//请求获取锁 while(precondition does not hold){//没有满足前提条件 release loc...

2015-03-01 14:12:21

阅读数 502

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭