
java并发编程
文章平均质量分 57
LittleLeeZi
这个作者很懒,什么都没留下…
展开
-
CountDownLatch,CyclicBarrier,Semaphore的区别
CountDownLatch闭锁 作用是设置一个数量n,latch.await()阻塞住一个线程t,每当latch.countDown()一次,n-1,直到n=0,线程t会被释放,阻塞结束CyclicBarrier栅栏 作用是设置一个数量n,调用barrier.await()的线程都会被阻塞(同时n-1),直到n=0,所有被barrier阻塞的队列都会被释放Semaphore信号量 作用是设置一个数量n,调用semaphore.acquire()一次,n就-1,如果n=0,调...原创 2021-02-26 18:00:51 · 296 阅读 · 0 评论 -
Java并发编程(二)——Thread.currentThread()研究
Java并发编程(二)——Thread.currentThread()研究一,存在的问题 Thread.currentThread()是Thread的一个静态方法,用来获取当前线程对象的一个引用。 问题在于为什么不简单的用this来获取,而单独写了一个静态的currentThread()方法来获取当前线程呢?二,一个小demo 首先看一个小例子,该例子引用自知乎https://www.zh原创 2016-03-21 12:13:23 · 6715 阅读 · 0 评论 -
Java并发编程(三)——synchronized
Java并发编程(三)——synchronized一,概述 synchronized关键字是Java中用来控制线程并发访问的基础机制,利用synchronized来控制一块代码同一时间只能有一个线程访问,其它线程等待,相当于加锁。 synchronized提供的是互斥锁,仅能实现对资源的互斥访问,而concurrent.lock不仅有互斥锁,还有读写锁。把读锁和写锁分开,写锁相当于互斥锁,而原创 2016-03-21 12:14:18 · 760 阅读 · 0 评论 -
volatile不能保证原子性,也就不能保证线程安全
volatile只能保证变量的可见性,无法保证对变量的操作的原子性。 还是以最常用的i++来说吧,包含3个步骤 1,从内存读取i当前的值 2,加1 3,把修改后的值刷新到内存对于普通变量来说多线程下1,2之间被中断,其它线程修改了i的值,那原来已经在1,2之间被中断的线程的i的值就已经无效了,所以多线程是不安全的。另外对于普通变量来说,步骤1并不是每次都会从内存中读取,步骤3转载 2017-03-23 18:09:46 · 4715 阅读 · 0 评论 -
Java并发编程(一)——线程
Java并发编程(一)——线程一,线程的实现方式 Java中实现多线程有两种方式,如下:1,继承java.lang.Thread类,重载它的run()方法; 2,实现java.lang.Runnable接口,重载接口中的run()方法。 这两种实现方式没有优劣,但由于Java中不允许多继承,所以使用第二种实现接口的方式更加灵活。 另外需要注意的是实现了Runnable的类,就像其字面描述原创 2016-03-21 11:41:31 · 848 阅读 · 0 评论