01 2019 档案

摘要:用法:ThreadLocal用于保存某个线程共享变量:对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。 ThreadLocal.get: 获取ThreadLocal中当前线程共享变量的值。 ThreadLocal.se 阅读全文
posted @ 2019-01-24 11:50 橘子洲头。 阅读(162) 评论(0) 推荐(0) 编辑
摘要:作用我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁 阅读全文
posted @ 2019-01-24 11:42 橘子洲头。 阅读(149) 评论(0) 推荐(0) 编辑
摘要:Master-Worker模式是常用的并行模式之一,它的核心思想是:系统由Master进程和Worker进程两类进程协同工作,Master负责接收和分配任务,Wroker负责处理子任务。当各个Worker进程将子任务处理完成后,将结果返回给Master进程,由Master进程进行汇总,从而得到最终的 阅读全文
posted @ 2019-01-23 17:13 橘子洲头。 阅读(367) 评论(0) 推荐(0) 编辑
摘要:Future模式的核心:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑。 Future模式有点类似于商品订单。在网上购物时,提交订单后,在收货的这段时间里无需一直在家里等候,可以先干别的事情。类推到程序设计中时,当提交请求时,期望得到答复时,如果这个答复可能很慢。传统的是 阅读全文
posted @ 2019-01-23 17:07 橘子洲头。 阅读(776) 评论(0) 推荐(0) 编辑
摘要:ConcurrentHashMap HashMap是线程不安全的,可以使用Collections.synchronizedMap(map)把一个不安全的map变成安全的,但是这里可以直接使用ConcurrentHashMap。 ConcurrentHashMap是线程安全的的Hash表。对于多线程的 阅读全文
posted @ 2019-01-23 11:52 橘子洲头。 阅读(377) 评论(0) 推荐(0) 编辑
摘要:在前面我们提到了阻塞队列,也用过了LinkedBolckingQueue队列了,在这里,我们主要对 ArrayBlockingQueue,PriorityBlockingQueue,DelayQueue,SynchronousQueue,LinkedTransferQueue,LinkedBlock 阅读全文
posted @ 2019-01-21 20:55 橘子洲头。 阅读(497) 评论(0) 推荐(0) 编辑
摘要:CyclicBarrier概念:CyclicBarrier是多线程中的一个同步工具,它允许一组线程互相等待,直到到达某个公共屏障点。形象点儿说,CyclicBarrier就是一个屏障,要求这一组线程中的每一个线程都要等待其他的线程执行完成,即这一组线程全部来到屏障前(全部执行完成),屏障才会打开,放 阅读全文
posted @ 2019-01-20 17:38 橘子洲头。 阅读(235) 评论(0) 推荐(0) 编辑
摘要:概念:CountDownLatch是多线程里面一个类似于计数器的高级同步工具,它的初始值代表线程的数量,当一个线程完成了任务后,CountDownLatch的值就减1,当值为0的时候,代表所有线程完成了任务,然后等待的线程可以开始自己的任务。 方法:这里主要涉及到两个核心的方法: await():线 阅读全文
posted @ 2019-01-20 17:29 橘子洲头。 阅读(180) 评论(0) 推荐(0) 编辑
摘要:概念: Semaphore是信号量,又称为信号灯,它可以控制某个共享资源可被同时访问的次数,即可以维护当前访问某一共享资源的线程个数,并提供了同步机制。当Semaphore的个数变成1时,即代表只允许一个线程访问,这是Semaphore的功能就变成了Lock的功能。 它有两个核心方法: acquir 阅读全文
posted @ 2019-01-20 17:23 橘子洲头。 阅读(324) 评论(0) 推荐(0) 编辑
摘要:ReentrantLock是重入锁,它与synchronized很像,它是synchronized的加强版,因为它具有一些synchronized没有的功能。下面我们看看两者的区别:synchronized具有一定的局限性: 当线程尝试获取锁的时候,如果获取不到锁会一直阻塞; 如果获取锁的线程进入休 阅读全文
posted @ 2019-01-19 17:50 橘子洲头。 阅读(195) 评论(0) 推荐(0) 编辑
摘要:CAS算法概述CAS是英文单词CompareAndSwap的缩写,中文意思是:比较并替换。CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。 CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作 阅读全文
posted @ 2019-01-18 20:58 橘子洲头。 阅读(1706) 评论(2) 推荐(0) 编辑
摘要:1.什么是Atomic?Atomic,中文意思是“原子的”,在java多线程中,有这样的一个包: java.util.concurrent.atomic——线程安全的原子操作包 这是JDK1.5的版本中为我们提供的原子操作包。所谓“原子”操作,是指一组不可分割的操作,操作者对目标对象进行操作时,要么 阅读全文
posted @ 2019-01-18 16:24 橘子洲头。 阅读(705) 评论(0) 推荐(0) 编辑
摘要:在我的上一条博客中,已经介绍到了多线程的经典案列——生产者消费者模式,但是在上篇中用的是传统的麻烦的非阻塞队列实现的。在这篇博客中我将介绍另一种方式就是:用阻塞队列完成生产者消费者模式,可以使用多种阻塞队列,这里最好使用LinkedBlockingQueue 下面请看代码: 结果输出: 总结一下: 阅读全文
posted @ 2019-01-17 17:59 橘子洲头。 阅读(225) 评论(0) 推荐(0) 编辑
摘要:生产者消费者模型 具体来讲,就是在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品。生产消费者模式如下图。(图片来自网络,侵删!) 生产者消费者模型的实现 生产者是一堆线程,消费者是另一堆线程,内存缓冲区可以使用List数组队列,数 阅读全文
posted @ 2019-01-17 17:51 橘子洲头。 阅读(270) 评论(0) 推荐(0) 编辑
摘要:1.什么是阻塞队列 我们知道,PriorityQueue、LinkedList这些都是非阻塞队列。在我们使用非阻塞队列的时候有一个很大问题,它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了, 阅读全文
posted @ 2019-01-17 17:42 橘子洲头。 阅读(341) 评论(0) 推荐(0) 编辑
摘要:关于这三个方法,我们可以查询API得到下列解释: wait():导致当前的线程等待,直到其他线程调用此对象的notify( ) 方法或 notifyAll( ) 方法或者指定的事件用完 notify():唤醒在此对象监视器上等待的单个线程 notifyAll():唤醒在此对象监视器上等待的所有线程 阅读全文
posted @ 2019-01-17 17:34 橘子洲头。 阅读(282) 评论(0) 推荐(0) 编辑
摘要:1.synchronized是什么?synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象(锁对象);2. 修饰一个(静态)方法,被修饰的方法称为同 阅读全文
posted @ 2019-01-17 15:03 橘子洲头。 阅读(153) 评论(0) 推荐(0) 编辑
摘要:1.Java多线程实现的方式有四种:1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通过Callable和FutureTask创建线程4.通过线程池创建线程2.Thread实现方式 阅读全文
posted @ 2019-01-17 12:16 橘子洲头。 阅读(2364) 评论(1) 推荐(0) 编辑
摘要:1.反射定义:Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。 2.反射作用:取得任何一个已知名称的class的内部信息。 3.Class对象:每个类都会产生一个对应的Class对象,也就是保存的.c 阅读全文
posted @ 2019-01-11 16:47 橘子洲头。 阅读(290) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示