自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 java Lock(显示锁)

1.显示锁与内置锁对比内置锁在代码块调用结束后会自动释放锁,但是显示锁必须自己控制加锁和释放锁,因此使用显示锁更加危险(忘记释放锁)。内置锁不支持中断,阻塞的线程会一直等待直到拥有锁。而显示锁支持中断并且在处理锁的不可用问题上更加灵活(例如调用tryLock不会阻塞并且可以定时和轮询)。显示锁并不能代替内置锁,只有当内置锁不能满足需求是才可以考虑显示锁。内置锁要比显示锁更安全,内置锁作为JVM

2016-04-26 23:33:13 1477

原创 java Executor框架

1.为什么要使用线程池单线程执行任务必须串行的执行,那么如果某个任务需要很长的计算时间或者发生IO等阻塞,那么后面的任务必须长时间的等待。并且在多处理器环境中,单线程只占用一个处理器,其他处理器得不到利用。假设为每一个任务创建一个线程(即无限制的创建线程),任务执行完之后销毁线程。那么频繁的创建和销毁线程需要很大的开销;并且当线程的数量远大于处理器的数量时,大量的线程需要在内存中等待并占用内存;

2016-04-17 12:51:52 398

原创 java CyclicBarrier

Barrier和CountDownLatch有些类似,它能阻塞一组线程直到某个事件发生,但是Barrier阻塞的这组线程必须同时到达栅栏位置,才能继续执行。闭锁用于等待事件,而栅栏用于等待同组的其他线程。对应构造方法:CyclicBarrier(int parties)。parties对应阻塞的线程数量。Barrier还允许在所有线程都到达栅栏位置时,启动另外一个线程执行某些事情,等到这个线程执行

2016-04-13 17:13:55 303

原创 java Semaphore(信号量)

1.信号量用来累计唤醒的次数,从而不会产生notify信号丢失的问题。信号量也要指定初始信号的大小,acquire()方法将信号量的值减一,如果信号量的值小于等于零,那么调用线程会阻塞。而release()方法将信号量加一,并且不会产生阻塞。关键:信号量的取值,判断,修改以及可能发生的阻塞这一系列操作都是原子操作。2.信号量可以用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量,

2016-04-13 15:05:20 612

原创 java CountDownLatch(闭锁)

CountDownLatch的和join有类似之处,但是比join强大并且灵活许多。在实例化一个CountDownLatch时,需要设置一个初始计数,所有调用await()方法的线程都会阻塞直到计数减为零,countDown()方法每调用一次 ,计数减一直到减为零从而唤醒其他所有调用await()方法的线程。CountDownLatch的计数功能是一次性的,即它的计数减为零时,不能再重新设置它的

2016-04-12 20:35:07 273

原创 线程间协作:wait,notify,notifyAll,join,yield

wait1.wait,notify,notifyAll是Object类的方法。在使用时必须包含在synchronized方法中或者同步块中。即必须先获得正确的对象锁,调用wait后,会释放自己占有的锁并且加入到等待池中等待。直到有其他线程调用同一个对象的notify/notifyAll方法才会唤醒。如果在没有获得对象锁之前调用wait,notify,notifyAll会抛出IllegalMonito

2016-04-12 18:01:30 422

原创 阻塞方法与中断方法

1.线程可能在执行过程中阻塞或者暂停执行,例如等待IO结束,等待获得一个锁,等待从Thread.sleep方法中醒来,或者等待另一个线程的计算结果。2.阻塞方法:BlockingQueue的put和take方法会抛出收检查异常:InterruptedException。还有类似的方法如Thread.sleep。抛出InterruptedException的方法叫做阻塞方法。如果这个方法被中断,他将努

2016-04-12 11:48:25 4539

原创 只读共享

前面讲了保证线程安全的两种思路:安全的共享(保证同步)和线程封闭(不共享也就不存在线程安全的问题)。还有一种思路是共享只读的数据(不可更改当然没有一致性的问题)。并发编程书中强调了不可变对象一定是线程安全的。

2016-04-03 12:34:26 395

原创 java ThreadLocal及线程封闭

当访问共享的可变数据时,需要使用同步机制。那么换一个思路,不共享对象就可以避免使用同步机制。1.栈封闭java中基本类型的局部变量及对象引用是保存在java栈中并且是线程隔离的,因此,在方法中全部使用基本类型的局部变量并且保证对象的引用不会逸出,那么就可以确保其他线程不能访问到,因此就不需要同步机制。2.ThreadLocal使用ThreadLocal共享数据其实并不是共享同一个数据,而是为每一个线

2016-04-01 21:37:13 311

原创 java volatile变量

valatile用来修饰共享变量,是一种弱的同步机制,用来确保将变量的更新操作通知到其他线程。volatile实现原理首先看一段代码:public class SynchronizedExample { //一个控制变量,作为print方法的结束控制 private boolean asleep = false; public void print() { w

2016-04-01 18:27:54 279

原创 java synchronized内置锁

java提供了内置锁来支持原子操作,synchronized可以修饰静态方法,成员方法以及一段代码块。当线程调用同步方法或者同步代码块时,需要先获内置锁,调用结束释放这个锁之后其他线程才能接着获得锁并调用。synchronized修饰静态方法synchronized修饰静态方法时,获得的是Class对象的锁,与具体的实例对象的内置锁并不冲突。public class SynchronizedExam

2016-04-01 15:08:56 610

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除