欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

比较与对照:Java同步(synchronized)与Lock接口在并发控制中的异同点

最编程 2024-07-28 19:40:39
...
  • package test.thread;  
  • import java.util.concurrent.locks.Lock;  
  • import java.util.concurrent.locks.ReentrantLock;  
  • public class TestLock {  
  •     private int j;  
  •     private Lock lock = new ReentrantLock();  
  •     public static void main(String[] args) {  
  •         TestLock tt = new TestLock();  
  •         for (int i = 0; i < 2; i++) {  
  •             new Thread(tt.new Adder()).start();  
  •             new Thread(tt.new Subtractor()).start();  
  •         }  
  •     }  
  •     private class Subtractor implements Runnable {  
  •         @Override  
  •         public void run() {  
  •             for (int i = 0; i < 15; i++) {  
  •                 // 这里抛异常了,锁能释放吗?会释放,但是lock就不会释放,所以需要加上try..catch  
  •                 /*synchronized (TestLock.this) {  
  •                     System.out.println("j--=" +j--); 
  •                 }*/  
  •                 lock.lock();  
  •                 try {  
  •                     System.out.println("j--=" + j--);  
  •                 } finally {  
  •                     lock.unlock();  
  •                 }  
  •             }  
  •         }  
  •     }  
  •     private class Adder implements Runnable {  
  •         @Override  
  •         public void run() {  
  •             for (int i = 0; i < 15; i++) {  
  •                  /*synchronized (TestLock.this) { 
  •                      System.out.println("j++="+j++);  
  •                  }*/  
  •                 lock.lock();  
  •                 try {  
  •                     System.out.println("j++=" + j++);  
  •                 } finally {  
  •                     lock.unlock();  
  •                 }  
  •             }  
  •         }  
  •     }  
  • }  
  • 推荐阅读