Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104521
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 352
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-23 12:37
文章分类

全部博文(41)

文章存档

2015年(1)

2014年(28)

2013年(12)

我的朋友

分类: Java

2014-08-30 19:53:48

主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自
动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更
强大的功能,例如,它的tryLock方法可以非阻塞方式去拿锁。
举例说明(对下面的题用lock 进行了改写):


点击(此处)折叠或打开

  1. package com.wp;

  2. import java.util.concurrent.locks.Lock;
  3. import java.util.concurrent.locks.ReentrantLock;
  4. public class ThreadTest {
  5. /**
  6. * @paramargs
  7. */
  8.     private int j;
  9.     private Lock lock =new ReentrantLock();
  10.     
  11.     public static void main(String[] args) {
  12. // TODO Auto-generated method stub
  13.         ThreadTest tt = new ThreadTest();
  14.         for(int i=0;i<2;i++){
  15.             new Thread(tt.new Adder()).start();
  16.             new Thread(tt.new Subtractor()).start();
  17.         }
  18.     }
  19.     
  20.     private class Subtractor implements Runnable
  21.     {
  22.         @Override
  23.         public void run() {
  24.             // TODO Auto-generated methodstub
  25.             while(true){
  26.                 /*synchronized (ThreadTest.this) {
  27.     System.out.println("j--="+ j--);
  28.     //这里抛异常了,锁能释放吗?
  29.     }*/
  30.                 lock.lock();
  31.                 try {
  32.                     System.out.println("j--="+ j--);
  33.                 }finally{
  34.                     lock.unlock();
  35.                 }
  36.             }
  37.         }
  38.     }
  39. private class Adder implements Runnable
  40. {
  41.     @Override
  42.     public void run() {
  43.         // TODO Auto-generated methodstub
  44.         while(true){
  45.             /*synchronized (ThreadTest.this) {
  46.     System.out.println("j++="+ j++);
  47.     }*/
  48.             lock.lock();
  49.             try{
  50.                 System.out.println("j++="+ j++);
  51.             }finally{
  52.                 lock.unlock();
  53.             }
  54.         }
  55.     }
  56. }
  57. }


阅读(1381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~