- java.util.concurrent.atomic包,封装原子特性—AtomicLong
- synchronized,方法锁,代码块锁,对应的都是对象锁
- 对应类继承Runnable接口,或者扩展thread方法,重写run方法
public synchronized int testSync() throws InterruptedException { for(int i = 0; i < 10; i++) { System.out.println("current thread" + Thread.currentThread().getName()); Thread.sleep(1000); } return 0; } public void run() { testSync(); } Thread t1 = new Thread(thr1); t1.start();
- 通过synchronized对对象枷锁,枷锁代码块
public void testSy() throws InterruptedException { synchronized (a) { for(int i = 0; i < 10; i++) { System.out.println("current thread" + Thread.currentThread().getName()); Thread.sleep(1000); } } }
- 锁的重入,链路上可以可以嵌套调用同一个锁的多个方法,或者父类方法
- 同步锁区间不易过大,也不宜过小
- 非原子64位操作
- 分高低32为读取,读取的过程中可能存在错位。
- 锁的行为在于互斥和内存可见,为了确保读到最新值,所有的操作必须在同一个锁上进行同步
- volatile,原子操作声明,volatile变量不会被缓存到寄存器或不可见的地方,读取的时候总是返回最新的值,包括自身状态可见性,引用对象状态可见性。只保证可见性,不保证原子性,锁既保证可见性,也保证原子性,例如(Cout++)。 如下:变量i加上前缀,i就是线程数的1000倍,否则就会出现无效值。
volatile int i=0; public void testSy() throws InterruptedException { for(int j = 0; j< 1000; j++) { i++; } }
Java并发编程实战笔记
最新推荐文章于 2024-08-11 21:50:30 发布