简述synchronized和java.util.concurrent.locks.Lock的异同


主要相同点:Lock能完成synchronized所实现的所有功能

主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更强大的功能,例如,它的tryLock方法可以非阻塞方式去拿锁。

举例说明(对下面的题用lock进行了改写):

package com.huawei.interview;

 

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

 

publicclass ThreadTest {

 

/**

* @paramargs

*/

 

private int j;

private Lock lock =newReentrantLock();

public static voidmain(String[] args) {

// TODO Auto-generated method stub

ThreadTest tt = new ThreadTest();

for(int i=0;i<2;i++)

{

new Thread(tt.new Adder()).start();

new Thread(tt.new Subtractor()).start();

}

}

 

private class SubtractorimplementsRunnable

{

 

@Override

public void run() {

// TODO Auto-generated methodstub

while(true)

{

/*synchronized (ThreadTest.this) {

System.out.println(“j–=”+ j–);

//这里抛异常了,锁能释放吗?

}*/

lock.lock();

try

{

System.out.println(“j–=”+ j–);

}finally

{

lock.unlock();

}

}

}

 

}

 

private class AdderimplementsRunnable

{

 

@Override

public void run() {

// TODO Auto-generated methodstub

while(true)

{

/*synchronized (ThreadTest.this) {

System.out.println(“j++=”+ j++);

}*/

lock.lock();

try

{

System.out.println(“j++=”+ j++);

}finally

{

lock.unlock();

}

}

}

 

}

}

免责声明:该资源版权归原作者所有,本站只是负责搜集和整理,本站不承担任何技术及版权问题。在本站下载该资源仅提供学习参考和研究,不得用于商业用途,否则一切后果请用户自负。请在下载后在24小时内删除,一切关于该资源商业行为与学士资源网无关。本站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。如有侵权、不妥之处,请联系站长以便及时删除,敬请谅解!侵权/投稿邮箱:zhuanyexueshi@163.com
学士资源网 » 简述synchronized和java.util.concurrent.locks.Lock的异同

发表评论

学士资源网为大家提供最优质的资源集合

联系学士 资源Q群
嘿,我来帮您!