Java并发编程积累
不断完善的少年
干什么都需要不断完善。
馒头比外卖更努力。
展开
-
进程和线程的区别?
参考:http://www.cnblogs.com/way_testlife/archive/2011/04/16/2018312.html宏观:1:进程,是并发执行的程序在执行过程中分配和管理系统资源的基本单位。每一个进程都有一个自己的地址空间。 2:线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是原创 2015-10-17 02:38:48 · 151 阅读 · 0 评论 -
java多线程总结五:线程池的原理及实现
1、线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。 一个线程转载 2016-04-19 22:26:16 · 663 阅读 · 0 评论 -
并发包-Semaphore实现线程的通信
作用:维护当前资源被线程访问的个数,当达到方法指定的值后,资源类似自动的上锁,其他线程需要等待获得许可。使用:实例.acquire()获得许可,许可减一。实例.release()释放许可,许可加一。实例:通过Semaphore维护list的访问数,list的大小维持在5个(包括5)一下。public class test2 { static List list =原创 2016-05-04 21:21:06 · 368 阅读 · 0 评论 -
synchronized 修饰在 static方法和 非static方法的区别
【问题描述】关于Java中synchronized 用在实例方法和对象方法上面的区别【问题分析】大家都知道,在Java中,synchronized 是用来表示同步的,我们可以synchronized 来修饰一个方法(实例方法和类方法---注:不知道这样叫准确不准确,大家理解我的意识就行了)。也可以synchronized 来修饰方法里面的一个语句块。修饰实例方法:[转载 2016-06-01 14:35:22 · 484 阅读 · 0 评论 -
读写锁ReentrantReadWriteLock
实例:public class ReentrantReadWriteLockTest { private static ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); //private static ReentrantLock lock = new ReentrantLock(); private static R原创 2016-06-07 21:53:50 · 375 阅读 · 0 评论 -
ConcurrentHashMap如何实现高并发性的
1)利用锁的分段,默认16个锁共同维护整个ConcurrentHashMap,使一个写线程不会持有整个ConcurrentHashMap的锁,降低了持有锁的频率,大大的提高了并发性。2)volatile变量的使用,根据先行发生原则:对于同一个volatile变量,一个写操作会先行发生后面的读操作,每一次,写操作都会队volatile变量的count进行改写,每次读操作都会先行访问这个count原创 2016-06-24 20:00:32 · 1019 阅读 · 0 评论 -
java并发编程实战笔记-死锁
死锁的定义:按书上所说,死锁就是自己拥有其他人需要的资源,同时又在等待其他人已经拥有的资源,并且每个人在获得所需要的资源之前都不会放弃自己已经有的资源。死锁的类型:1.简单的顺序死锁:public class die1 { public Object lock1 = new Object(); public Object lock2 = new Object(); pu原创 2016-06-18 00:17:00 · 579 阅读 · 0 评论 -
减少锁的竞争
1)通过使用synchronized代码块儿代替在方法上添加synchronized来保护共享状态的方法,减小锁的范围,减少线程持有锁的时间。2)锁的分解,例如一个类有两个共享状态,一个是人,一个是钱,分别提供两个锁,分别对应这两个共享状态,那么即可减少持有锁的频率。3)锁的分解的进一步扩展那就是锁的分段,例如共享状态人是使用HashTable保存那么程序性能因为经常持有锁二成为性能瓶颈,原创 2016-06-18 21:13:18 · 788 阅读 · 0 评论 -
显式锁ReentrantLock
使用:1)普通上锁和释放锁:lock.lock(); try{ }finally{ lock.unlock(); }2)定时的轮询,如果指定时间没有得到锁的话就会放弃,例子中的线程就会提前结束:public class TestTryLock { static AtomicInteger ii = new AtomicInteger(0); static int原创 2016-06-07 21:25:38 · 312 阅读 · 0 评论