Thread
艾伦蓝
Just do it
展开
-
java 线程总结
[size=medium][color=darkred][b]一. 线程状态类型[/b][/color][/size]1. 新建状态(New):新创建了一个线程对象。[b]2. 就绪状态(Runnable):[/b]线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。3. 运行状态(Running):就绪状态的线...原创 2014-06-05 16:31:27 · 113 阅读 · 0 评论 -
java Callable使用实例
ava.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;/** * @author:xxx * @TODO:使用callable进行自增 */public class AddCallable { public static void main(String[] args) { long begin = Sy原创 2014-04-26 12:07:24 · 229 阅读 · 0 评论 -
java 线程总结
其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。[color=red][b]4. 阻塞状态(Blocked):[/b][/color]阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:(一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。(二)、同步阻塞:运行的原创 2014-06-05 16:31:27 · 105 阅读 · 0 评论 -
java ThreadLocal本地线程总结
原创 2014-06-27 22:05:51 · 102 阅读 · 0 评论 -
java Synchronized使用
原创 2014-07-06 11:17:39 · 61 阅读 · 0 评论 -
java Executors各种线程池总结
并发包下如何创建线程池。 [color=red]1.创建一个可重用固定线程集合的线程池,以共享的无界队列方式来运行这些线程。[/color][code="java"]ExecutorService threadPool = Executors.newFixedThreadPool(3);// 创建可以容纳3个线程的线程池[/code] [color=red]2. 创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。[/color][原创 2014-07-25 19:41:34 · 80 阅读 · 0 评论 -
java 锁对象Lock-同步问题更完美的处理方式(ReadWriteLock)
原创 2014-08-29 19:44:31 · 76 阅读 · 0 评论 -
java 多线程线程池 - Callable和Future
Future用于获取结果。[/color] Java 5在concurrency包中引入了java.util.concurrent.Callable 接口,它和Runnable接口很相似,但它可以返回一个对象或者抛出一个异常。 [color=red]Callable接口使用泛型去定义它的返回类型。[/color]Executors类提供了一些有用的方法在线程池中执行Callable内的任务。由于Callable任务是并行的([color=red]并行就是整体看上去是并行的,其实在某个时间原创 2015-01-03 20:53:34 · 77 阅读 · 0 评论 -
java Thread Join方法学习(同步)(等待调用join的线程先执行)
dTesterA implements Runnable { private int counter; @Override public void run() { while (counter原创 2016-03-15 10:09:39 · 103 阅读 · 0 评论 -
java 不同线程之间的切换(wait和notify)
原创 2016-06-21 10:40:10 · 85 阅读 · 0 评论 -
java 通过使用wait和notify进行线程之间通信(代码)
de public void run() { for (int i = 1; i原创 2016-11-14 08:56:36 · 91 阅读 · 0 评论 -
java 深入分析Volatile的实现原理
原创 2016-11-16 08:47:43 · 75 阅读 · 0 评论 -
java Copy-On-Write容器学习
原创 2016-11-16 09:00:58 · 79 阅读 · 0 评论 -
java AtomicInteger基于CAS的乐观锁实现
原创 2016-11-16 11:13:52 · 89 阅读 · 0 评论 -
java AbstractQueuedSynchronizer介绍以及原理分析
原创 2016-11-18 14:27:41 · 102 阅读 · 0 评论 -
java CyclicBarrier进行并发编程
原创 2017-08-25 15:44:48 · 62 阅读 · 0 评论 -
java Curator实现分布式锁
lder().connectString("127.0.0.1:2181") .retryPolicy(new ExponentialBackoffRetry(1000, 3)).build();// 必须先启动 否则无效过 client.start(); final InterProcessMutex lock = new InterProcessMutex(client, "/zk-xxx/childs");原创 2017-09-05 14:39:05 · 90 阅读 · 0 评论 -
java Guava ListenableFuture实现线程回调功能
于Future获取任务结果是阻塞的,所以将会依次调用Future.get()方法,这样的效率会很低。很可能第一个下载速度很慢,则会拖累整个下载速度。 Future主要功能在于获取任务执行结果和对异步任务的控制。但如果要获取批量任务的执行结果,从上面的例子我们已经可以看到,单使用 Future 是很不方便的。其主要原因在于:一方面是没有好的方法去判断第一个完成的任务;另一方面是 Future的get方法 是阻塞的,使用不当会造成线程的浪费。第一个问题可以用 CompletionService 解决,原创 2017-11-14 10:17:03 · 313 阅读 · 0 评论 -
java Thread线程实例
color],修饰静态方法时表示[color=red]锁住了这个类在方法区中的类对象[/color](记住JAVA中everything is object)。2.可以用synchronized直接构建代码块。3.在使用Object.wait()使当前线程进入该Object的阻塞队列时,以及用Object.notify()或Object.notifyAll()唤醒该Object的阻塞队列中一个或所有线程时,必须在外层使用synchronized (Object),这是JAVA中线程同步的最常原创 2014-04-22 11:07:02 · 85 阅读 · 0 评论 -
java 使用多线程的场景总结
在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在程序中的作用。[b]1、提高前端请求的响应速度。[/b]当我们执行一个比较耗时的方法时,http请求得不到响应甚至会超时,这时如果业务上允许数据的延迟,我们可以使用多线程来进行处理比较耗时的方法。这样前端发送了请求,后端令开启了一个线程去处理任务,就不会阻塞主线程了。[b]2、减清服务器的压力。[/b]包括我们的web容...原创 2018-04-10 14:35:23 · 314 阅读 · 0 评论 -
java ThreadLocal本地线程总结
首先,[color=red]ThreadLocal 不是用来解决共享对象的多线程访问问题的[/color],一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。[color=red][b]各个线程中访问的是不同的对象。[/b][/color][size=medium][b][color=red]ThreadLoca...原创 2014-06-27 22:05:51 · 99 阅读 · 0 评论 -
java Synchronized使用
[size=medium][color=red][b]synchronized方法[/b][/color][/size]synchronized void f() { }synchronized void g(){ }每个对象都有一个锁(也称监控器monitor),它是对象生来就有的东西(因此你不必为此写任何代码)。[color=red][b]当你调用synchronized方...原创 2014-07-06 11:17:39 · 95 阅读 · 0 评论 -
java 多线程线程池 - Callable和Future
[color=red]Callable接口代表一段可以调用并返回结果的代码;Future接口表示异步任务,是还没有完成的任务给出的未来结果。所以说Callable用于产生结果,Future用于获取结果。[/color] Java 5在concurrency包中引入了java.util.concurrent.Callable 接口,它和Runnable接口很相似,但它可以返回一个对象或...原创 2015-01-03 20:53:34 · 117 阅读 · 0 评论 -
java Executors各种线程池总结
我们的web项目都是部署在服务器上,浏览器端的每一个request就是一个线程,那么服务器需要并发的处理多个请求,就需要线程池技术,下面来看一下Java并发包下如何创建线程池。 [color=red]1.创建一个可重用固定线程集合的线程池,以共享的无界队列方式来运行这些线程。[/color][code="java"]ExecutorService threadPool = Exec...原创 2014-07-25 19:41:34 · 287 阅读 · 0 评论 -
java 锁对象Lock-同步问题更完美的处理方式(ReadWriteLock)
[color=red]Lock是java.util.concurrent.locks[/color]包下的接口,Lock 实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我们拿Java线程(二)中的一个例子简单的实现一下和sychronized一样的效果,代码如下:[code="java"]public class Lo...原创 2014-08-29 19:44:31 · 124 阅读 · 0 评论 -
java Thread线程实例
synchronized使用起来非常简单,有三种使用模式:1. 作为修饰符加在方法声明上,synchronized修饰非静态方法时表示[color=red]锁住了调用该方法的堆对象[/color],修饰静态方法时表示[color=red]锁住了这个类在方法区中的类对象[/color](记住JAVA中everything is object)。2.可以用synchronized直接构...原创 2014-04-22 11:07:02 · 169 阅读 · 0 评论 -
java 不同线程之间的切换(wait和notify)
[code="java"]package com.thread; /** * 创建两个线程,一个线程循环10次,另一个线程100次,两者交替运行50次 * 即到A线程时,它运行本身循环的10次之后;马上轮到B线程,它则运行本身的100次循环 * 以此轮换切换线程共50次 */ public class ThreadTest { publ...原创 2016-06-21 10:40:10 · 220 阅读 · 0 评论 -
java Callable使用实例
[color=red][size=large]多个线程实现累加[/size][/color][code="java"]package com.thread;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurr...原创 2014-04-26 12:07:24 · 353 阅读 · 0 评论 -
java 通过使用wait和notify进行线程之间通信(代码)
[code="java"]public class Test { private final Operate operate = new Operate(); public static void main(String[] args) { new Thread(new Runnable() { @Overri...原创 2016-11-14 08:56:36 · 83 阅读 · 0 评论 -
java 深入分析Volatile的实现原理
[color=red][b]引言[/b][/color]在多线程并发编程中synchronized和Volatile都扮演着重要的角色,[color=red][b]Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。[/b][/color]可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比syn...原创 2016-11-16 08:47:43 · 127 阅读 · 0 评论 -
java Copy-On-Write容器学习
[color=red][b]Copy-On-Write简称COW[/b][/color],是一种用于程序设计中的优化策略。其基本思路是,[b]从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。[/b]从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是[color=r...原创 2016-11-16 09:00:58 · 117 阅读 · 0 评论 -
java AtomicInteger基于CAS的乐观锁实现
[color=darkred][b]1. 悲观锁与乐观锁[/b][/color] 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间[color=red][b],需要进行cpu切换,也就是会发生进程的切换。[/b][/color]切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据。当一个线程被挂...原创 2016-11-16 11:13:52 · 177 阅读 · 0 评论 -
java AbstractQueuedSynchronizer介绍以及原理分析
[size=medium][color=red][b]简介[/b][/color][/size][b]提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。[/b]该同步器(以下简称同步器)[color=blue][b]利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础。[/b][/color]使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理...原创 2016-11-18 14:27:41 · 122 阅读 · 0 评论 -
java Thread Join方法学习(同步)(等待调用join的线程先执行)
[b][size=large][color=red]join() 方法主要是让调用该方法的线程完成run方法里面的东西后,再执行join()方法后面的代码。[/color][/size][/b][code="java"]class ThreadTesterA implements Runnable { private int counter; @Ove...原创 2016-03-15 10:09:39 · 501 阅读 · 0 评论 -
java CyclicBarrier进行并发编程
[size=medium][color=red][b]CyclicBarrier允许一组线程相互等待达到一个公共的障碍点。[/b][/color][/size]CyclicBarrier对于一组线程必须相互等待的场景很有用。[b]比如有一组线程,都要往数据库里面写入操作,只有当所有的线程都往数据库里面写入数据之后,这些线程才能继续往下执行,这时候就可以使用CyclicBarrier了。[/b]当所...原创 2017-08-25 15:44:48 · 120 阅读 · 0 评论 -
java Curator实现分布式锁
[size=medium][color=red][b]Curator实现分布式锁主要依赖于zookeeper[/b][/color][/size][code="java"]// Curator实现分布式锁 CuratorFramework client = CuratorFrameworkFactory.builder().connectString("127.0.0.1:21...原创 2017-09-05 14:39:05 · 212 阅读 · 0 评论 -
java Guava ListenableFuture实现线程回调功能
java Future具有局限性。在实际应用中,当需要下载大量图片或视频时,可以使用多线程去下载,提交任务下载后,可以从多个Future中获取下载结果,由于Future获取任务结果是阻塞的,所以将会依次调用Future.get()方法,这样的效率会很低。很可能第一个下载速度很慢,则会拖累整个下载速度。 Future主要功能在于获取任务执行结果和对异步任务的控制。但如果要获取批量任务...原创 2017-11-14 10:17:03 · 406 阅读 · 1 评论 -
java 使用多线程的场景总结
原创 2018-04-10 14:35:23 · 151 阅读 · 0 评论