标签:oid end cas tst static string AC get pac
synchronized 锁是jvm控制的,控制锁住的代码块只能有一个线程进入。线程执行完了锁自动释放,抛出异常jvm会释放锁。 ?synchronized的缺陷 1.如果一个线程被阻塞了,其余的线程就要一直等下去,Lock可以在线程阻塞的时候其他线程不用一直等下去。 2.同时读文件时候,其他线程也要等待,lock可以做到读的时候不加锁,写的时候枷锁。 3.synchronized不知道线程有没有成功获取到锁。Lock可以知道线程有没有成功获取到锁。
package cn.itcast_01_mythread.thread.testThread; public class MySynchronized { // synchronized也可以放在方法上面 public static void main(String[] args) { final MySynchronized mySynchronized = new MySynchronized(); final MySynchronized mySynchronized2 = new MySynchronized(); new Thread("thread1") { public void run() { synchronized (mySynchronized) { try { System.out.println(this.getName()+" start"); int i =1/0; //如果发生异常,jvm会将锁释放 Thread.sleep(5000); System.out.println(this.getName()+"醒了"); System.out.println(this.getName()+" end"); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); new Thread("thread2") { public void run() { synchronized (mySynchronized) { //争抢同一把锁时,线程1没释放之前,线程2只能等待 // synchronized (mySynchronized2) { //如果不是一把锁,可以看到两句话同时打印 System.out.println(this.getName()+" start"); System.out.println(this.getName()+" end"); } } }.start(); } }
标签:oid end cas tst static string AC get pac
原文地址:https://www.cnblogs.com/yaowen/p/9006846.html