本文主要是介绍Java中synchronized与java.util.concurrent.locks.Lock区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
相同点:Lock能完成synchronized所实现的所有功能
区别:Lock比synchronized更精确的线程语义和性能;chronized会自动释放锁,而Lock需要程序员手动释放,而且必须在finally从句中释放。Lock更强大的功能,如tryLock方法可以非阻塞方式去拿锁:
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;//synchronized
//java.util.concurrent.locks.Lockpublic class ThreadTest {private class Adder implements Runnable{@Overridepublic void run() {while(true){//1
// synchronized (ThreadTest.this) {
// System.out.println("j++=" + j++);
// }//2lock.lock();try{System.out.println("j++=" + j++);}finally{lock.unlock();}}} } private class Subtractor implements Runnable{@Overridepublic void run() {while(true){//1
// synchronized(ThreadTest.this){
// System.out.println("j--=" + j--);
// }//2lock.lock();try{System.out.println("j--=" + j--);}finally{lock.unlock();}}} }private int j;private Lock lock = new ReentrantLock();public static void main(String[] args) {ThreadTest tt = new ThreadTest();for(int i=0; i<2; i++){new Thread(tt.new Adder()).start();new Thread(tt.new Subtractor()).start();}}
}
程序运行结果:
这篇关于Java中synchronized与java.util.concurrent.locks.Lock区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!