随笔分类 -  JAVA-多线程

摘要:在 JAVA中的CountDownLatch、CyclicBarrier、Semaphore的简单测试 这文章里说到了线程的daemon问题,特写一篇来分析一下。 上代码: 注释掉20行,放开21行的运行结果如下: 注释掉21行,放开20行的运行结果如下: 我们来看看Thread的构造函数里的核心源 阅读全文
posted @ 2017-05-11 14:35 自行车上的程序员 阅读(3917) 评论(0) 推荐(0) 编辑
摘要:因公司需要做一个对于CountDownLatch的分享,特写了此blog。 具体细节可以参见:小结java自带的跟锁相关的一些类 在做这个分享的过程中发现了Main和junit的运行的区别,在另外一个Blog细说。 详见:http://www.cnblogs.com/yangzhilong/p/68 阅读全文
posted @ 2017-03-28 15:54 自行车上的程序员 阅读(384) 评论(0) 推荐(0) 编辑
摘要:java.util.concurrent包下的一些跟锁相关的类列表 Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition 对象。 所有已知实现类:ReentrantLock, 阅读全文
posted @ 2017-02-15 09:49 自行车上的程序员 阅读(465) 评论(0) 推荐(0) 编辑
摘要:JDK文档描述:public interface LockLock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition 对象。 锁是控制多个线程对共享资源进行访问的工具。通常,锁提供了... 阅读全文
posted @ 2015-09-10 22:20 自行车上的程序员 阅读(549) 评论(0) 推荐(0) 编辑
摘要:JDK文档描述:public interface CompletionService将生产新的异步任务与使用已完成任务的结果分离开来的服务。生产者 submit 执行的任务。使用者 take 已完成的任务,并按照完成这些任务的顺序处理它们的结果。例如,CompletionService 可以用来管理... 阅读全文
posted @ 2015-09-10 22:14 自行车上的程序员 阅读(502) 评论(0) 推荐(0) 编辑
摘要:JDK文档描述Callable:public interface Callable返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。 Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返... 阅读全文
posted @ 2015-09-10 22:05 自行车上的程序员 阅读(477) 评论(0) 推荐(0) 编辑
摘要:JDK文档描述newSingleThreadScheduledExecutor()创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。(注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程会代替它执行后续的任务)。可保证顺序地执行各个任务,并且在任意给... 阅读全文
posted @ 2015-09-07 15:39 自行车上的程序员 阅读(6141) 评论(0) 推荐(0) 编辑
摘要:JDK文档描述创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 6... 阅读全文
posted @ 2015-09-07 15:27 自行车上的程序员 阅读(436) 评论(0) 推荐(0) 编辑
摘要:JDK文档说明:创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。(注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程将代替它执行后续的任务)。可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的 n... 阅读全文
posted @ 2015-09-07 15:16 自行车上的程序员 阅读(2706) 评论(0) 推荐(0) 编辑
摘要:JDK文档说明:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新... 阅读全文
posted @ 2015-09-03 23:59 自行车上的程序员 阅读(32129) 评论(1) 推荐(1) 编辑
摘要:java.util.concurrent.atomic包里提供了AtomicBoolean可以用原子方式更新的 boolean 值。AtomicInteger可以用原子方式更新的 int 值。AtomicIntegerArray可以用原子方式更新其元素的 int 数组。AtomicIntegerFi... 阅读全文
posted @ 2015-09-03 22:18 自行车上的程序员 阅读(272) 评论(0) 推荐(0) 编辑
摘要:1 /** 2 * 线程范围类的数据共享 3 * 核心:ThreadLocal类 4 * 实际场景: 5 * Hibernate的getCurrentSession方法,就是从线程范围内获取存在的session,如果不存在则新建一个并绑定到线程上 6 * struts将一个请求里的所有参... 阅读全文
posted @ 2015-09-03 21:24 自行车上的程序员 阅读(428) 评论(0) 推荐(0) 编辑
摘要:核心点:1、锁对象必须是同一个。2、wait()和notify()方法必须是调用锁对象的方法,而非this(线程)的。3、在多生产多消费的时候注意使用notifyAll而不是notifyAll,否则会造成死锁4、将需要同步的多个方法尽量分布在同一个对象里。测试代码: 1 import java.u... 阅读全文
posted @ 2015-08-27 23:02 自行车上的程序员 阅读(332) 评论(0) 推荐(0) 编辑
摘要:synchronized使用之基本原则:synchronized可以锁方法,也可以锁代码片段,但要实现互斥的基本就是在想要互斥的代码上加”同一把锁“,也就是同一个对象,也就是用==判断等于true的对象下面看一个例子:Work.java 真正做事情的类 1 package com.yzl; 2 ... 阅读全文
posted @ 2015-08-23 15:01 自行车上的程序员 阅读(486) 评论(0) 推荐(0) 编辑
摘要:1、直接使用Thread新建线程package com.yzl;public class ThreadPart_1 { //直接使用Thread对象新建线程并重run方法 public void test1(){ Thread thread1 = new Threa... 阅读全文
posted @ 2015-08-23 11:34 自行车上的程序员 阅读(315) 评论(0) 推荐(0) 编辑
摘要:电商的秒杀和抢购,对我们来说,都不是一个陌生的东西。然而,从技术的角度来说,这对于Web系统是一个巨大的考验。当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要。这次我们会关注秒杀和抢购的技术实现和优化,同时,从技术层面揭开,为什么我们总是不容易抢到火车票的原因? 一、 阅读全文
posted @ 2014-12-02 21:47 自行车上的程序员 阅读(1565) 评论(0) 推荐(2) 编辑