
Java多线程
cj2580
这个作者很懒,什么都没留下…
展开
-
jvm-内存模型
1.方法区也称”永久代” 、“非堆”, 它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小。运行时常量池:是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分原创 2016-11-11 17:15:50 · 313 阅读 · 0 评论 -
多线程-队列ArrayBlockingQueue 、LinkedBlockingQueue
ArrayBlockingQueue一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部是在队列中存在时间最长的元素。队列的尾部是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列获取操作则是从队列头部开始获得元素。这是一个典型的“有界缓存区”,固定大小的数组在其中保持生产者插入的元素和使用者提取的元素。一旦创建了这样的缓存区,就不能再增加其容量。试图向已原创 2016-11-13 14:16:24 · 470 阅读 · 0 评论 -
多线程-lock 锁的使用
Synchronized就相当于整个对象只有一个单一的Condition(即该对象本身)所有的线程都注册在它身上,线程调度的时候之后调度所有得注册线程,没有选择权,会出现相当大的问题 。所以,Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition 对象。锁是控制多个线程对共享资源原创 2016-11-13 13:34:07 · 1287 阅读 · 0 评论 -
多线程- countdownlatch、 CyclicBarrier、SemaPhore
CountDownLatch官方的解释为:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。我们现在就把它理解为倒数计数器,什么是倒数计数器呢,通俗的理解就是这个计数器事先有一个初始计数,在这个计数减到0之前,所有的线程等待。笔者今天早晨又看一则新闻说的高考“枪手”,看来每逢高考,“枪手”必火。那我们来模拟一下“枪手”的招募过程。假如我需要10个“枪手”,招募者一原创 2016-11-13 15:23:33 · 359 阅读 · 0 评论 -
多线程-Atomic分析
Java.util.concurrent中提供了atomic原子包,可以实现原子操作(atomic operation),即在多线程环境中,执行的操作不会被其他线程打断。public class AtomicDemo extends Thread { private static final AtomicInteger TEST_INT = new AtomicInteger原创 2016-11-13 14:36:04 · 356 阅读 · 0 评论 -
多线程-CopyOnWriteArrayList
CopyOnWrite容器即写时复制的容器。往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。类似的有Cop原创 2016-11-13 14:21:02 · 419 阅读 · 0 评论 -
java多线程脑图-需要熟悉的知识
原创 2016-11-04 15:18:43 · 1195 阅读 · 0 评论 -
多线程-线程池
Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。 n原创 2016-11-13 13:52:17 · 284 阅读 · 0 评论 -
多线程系列-volatile
java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作和其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。volatile与加锁机制的区别:加锁机制原创 2016-11-13 11:24:24 · 317 阅读 · 0 评论 -
多线程-ConcurrentHashMap
因为多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap,如以下代码线程不安全的HashMap因为多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap,如以下代码效率低下的HashTable容器HashTable容器使用synchronized来保证原创 2016-11-13 11:46:57 · 859 阅读 · 0 评论 -
kafka单机部署
下载kafka wget http://apache.fayea.com/kafka/0.10.0.1/kafka_2.10-0.10.0.1.tgz tar -xvzf kafka cd cd kafka_2.10-0.10.0.1编辑配置文件:修改 zookeeper.connect为localhost:2181/kafka zookeeper.connect=loca原创 2016-09-01 17:56:52 · 860 阅读 · 0 评论