多线程
ChanKamShing
这个作者很懒,什么都没留下…
展开
-
多线程——重入锁
当某个线程请求一个由其它线程持有的锁时,该线程就会进入等待或者阻塞状态,一直到持有锁的线程释放锁,然后再去竞争获取锁。然而,内置锁(即Synchronized修饰的锁对象)是可重入的,因此如果某个线程试图获得一个已经由它自己持有的锁,那么它会成功获得此锁,这就是所谓的重入锁,也可以理解为锁的重入。 “重入”,意味着获取锁的操作的粒度是“线程”,而不是“调用”,“调...原创 2019-01-17 13:25:36 · 360 阅读 · 0 评论 -
Timer类的schedual()与schedualAtFixedRate()的追赶性区别
使用Timer类对逻辑进行预设时,常用到两个方法,一个是schedual,另一个是schedualAtFixedRate。两者都有多种重载方法,当预设的执行时间在当前时间之后,那么两者执行的效果是完全一样;但是,反之,却出现一个很大的区别,就是追赶性。 schedual方法是不具备追赶性,而schedualAtFixedRate就具备追赶性,到底什么是追赶性呢?下...原创 2019-01-13 22:24:15 · 812 阅读 · 0 评论 -
多线程的Lock锁——ReentrantReadWriteLock
上一篇讲到ReentrantLock是排他性,一方面保证了线程的绝对安全,但另一方面降低了效率。对于一些不需要操作实例变量的方法中,有另外一种锁可以提高运行效率,这种锁就是ReadWriteReentrantLock。 ReentrantReadWriteLock,也称为读写锁。读写锁有两个锁,一个是读操作相关的锁,也叫共享锁;另一个是写操作相关锁,也叫排他锁。...原创 2019-01-10 23:10:22 · 176 阅读 · 0 评论 -
多线程的Lock锁——ReentrantLock
在Java多线程中,可以使用synchronized关键字来实现线程之间的同步互斥,但在JDK1.5中新增了Lock锁,同样可以实现同样的效果,并且扩展功能上也更加强大,比如嗅探锁定、多路分支通知等功能,而且使用上也更灵活。 Lock锁分为两类:ReentrantLock和ReentrantReadWriteLock。这里介绍ReentrantLock类的基础...原创 2019-01-10 22:54:11 · 332 阅读 · 0 评论 -
多线程——volatile
在多线程中,为了使得某个变量对任意一个线程可见,会使用volatile对该变量进行修饰。 理解volatile之前,要先知道线程是如何调用变量的。每一个线程都拥有自己的一个私有堆栈,变量是定义在主内存中,而每个线程会将变量copy一份到私有堆栈。每次启动线程操作,都会先从主内存读取熟读到私有堆栈,然后已知只会对copy过来的变量进行读写,当线程结束的时候,就会将变...原创 2019-01-15 22:37:13 · 1592 阅读 · 0 评论