多线程
酥梨儿
我一直很酥的
展开
-
synchronized锁可以锁定什么?
看看这段代码:有两个线程一个对count++一万次,另一个对count–一万次。结果应该还是0。public class Test1 { private static int count; public static void main(String[] args) throws InterruptedException { Test1 t = new Test...原创 2019-01-28 17:41:37 · 913 阅读 · 0 评论 -
synchronized锁的注意事项
该锁可以重入 。即 一个同步方法调用另一个同步方法,一个线程已经拥有某个对象的锁,再次申请的时候仍然会得到该对象的锁。public class Test1 { public synchronized void fun1(){ System.out.println("调用fun1"); fun2(); } public synchroniz...原创 2019-01-28 19:02:47 · 210 阅读 · 0 评论 -
volatile的用法
volatile保证对象的可见性但并不保证对象的原子性,因此不能替代synchronized锁。每次修改该对象后,会把值写入主内存通知其他线程说,我把线程值改了你们快读一下。举个例子:public class Test3 { private static /*volatile*/ boolean flag = true; public static void main(St...原创 2019-01-28 19:24:45 · 115 阅读 · 0 评论 -
java中的CountDownLatch(共享锁)与ReentrantLock(排他锁)
CountDownLatch(共享锁)又叫门闩。生成的时候需要说明门闩的数量,等到门闩的个数减为零的时候等待的线程可以启动。来看一段代码注意这里等待调用await()方法public class TestDemo { public static void main(String[] args) { CountDownLatch latch = new CountDown...原创 2019-01-28 23:17:43 · 2880 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier与Semaphore的区别
刚开始的时候我不能很好的理解门栓与循环等待的区别。书上讲的也不够清晰,说CyclicBarrier锁的是事务。后来想了想觉得门栓就像一个准点出发的大巴车,它才不管有多少人await它只管时间到了才出发也就是count降到0。而循环等待这个大巴车是看人数只要await的人数到了一定的界限就会发车。使用的时候门栓的countdown+await=循环等待的await。这样看来门栓要比await更...原创 2019-03-18 11:37:22 · 455 阅读 · 0 评论