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