java 之 Lock 同步锁学习示例

原创 2012年03月21日 16:37:20
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;


public class LockTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		init();
	}
	
	private static void init() {
		final Outputer outputer = new Outputer();
		
		new Thread(new Runnable() {

			@Override
			public void run() {
				while(true) {
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
//					outputer.output2("1111");
					outputer.output("1111");
				}
			}
			
		}).start();
		
		new Thread(new Runnable() {

			@Override
			public void run() {
				while(true) {
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
//					outputer.output2("2222");
					outputer.output("2222");
				}
			}
			
		}).start();
	}

}

/**
 * Lock 更加面向对象
 * @author ETHAN
 *
 */
class Outputer {
	
	Lock lock = new ReentrantLock();
	
	public void output(String name) {
		int len = name.length();
		//上锁,一定要释放
		lock.lock();
		try {
			for(int i=0;i<len;i++) {
				System.out.print(name.charAt(i));
			}
			
			System.out.println();
		} finally {
			//释放
			lock.unlock();
		}
		
	}

	//不加锁
	public void output2(String name) {
		int len = name.length();
		
			for(int i=0;i<len;i++) {
				System.out.print(name.charAt(i));
			}
			
			System.out.println();
		
	}
	
	public void output3(String name) {
		int len = name.length();
		synchronized (Outputer.class) {
			for(int i=0;i<len;i++) {
				System.out.println(name.charAt(i));
			}
			
			System.out.println();
		}
	}
}

java并发编程(synchronized同步和Lock显示锁)

为什么需要并发程序?               线程是java语言中不可或缺的重要功能,它们能使复杂的异步代码变得更简单,从而极大地简化了复杂系统的开发。另外,在开发当数据量大的时候,往往需要使用多...
  • H_Gao
  • H_Gao
  • 2015年11月03日 14:28
  • 2328

深入浅出Java并发包—锁(Lock)VS同步(synchronized)

今天我们来探讨一下Java中的锁机制。前面我们提到,在JDK1.5之前只能通过synchronized关键字来实现同步,这个前面我们已经提到是属于独占锁,性能并不高,因此JDK1.5之后开始借助JNI...
  • wxyFighting
  • wxyFighting
  • 2013年12月27日 18:48
  • 2735

java同步锁中synchronized和Lock接口类的区别

Lock提供了和sychronized类似的同步功能,只是在使用时需要显示地获取和释放锁。虽然Lock缺少了sychronized隐式获取释放锁的便捷性,但是却拥有了锁获取与是释放的可操作性、可中断的...
  • xuqiaobo
  • xuqiaobo
  • 2016年05月23日 10:54
  • 1750

线程中的同步代码块synchronized、同步方法和同步锁Lock

在学习线程的时候,因为线程的调度具有不确定性,所以银行取钱问题、多个窗口售卖火车票问题都是反应多线程的优越性以及不确定性。当程序中有多个并发线程在进入一个代码块中并且修改其中参数时,就很有可能引发线程...
  • sinat_15274667
  • sinat_15274667
  • 2015年11月01日 17:35
  • 3477

Java线程 锁对象Lock-同步问题比sychronized更完美的处理方式

Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我...
  • qq_23167527
  • qq_23167527
  • 2017年01月09日 18:43
  • 172

Java线程(6)锁对象Lock-同步问题更完美的处理方式

文章来源:http://blog.sina.com.cn/s/blog_6560efc9010185f9.html Lock是java.util.concurrent.loc...
  • buster2014
  • buster2014
  • 2015年08月05日 23:00
  • 584

Java多线程与并发应用-(9)-锁lock+条件阻塞conditon实现线程同步通信

一. lock可以代替synchronized关键字实现互斥功能。使用方法如下: Lock l = ...; l.lock(); try { // access...
  • lp1137917045
  • lp1137917045
  • 2015年05月02日 11:02
  • 1060

C#用lock锁进行读写线程同步

C#中实现同步的方法有许多,有兴趣可以自行研究。在这里记录下本人做开发过程用遇到的读写线程同步问题,以及解决方法。 1. 类介绍 主类Server.class  接口类ZoneInfo1DAL.c...
  • qq_32250495
  • qq_32250495
  • 2016年09月04日 13:51
  • 965

简单注解实现集群同步锁(spring+redis+注解)

互联网面试的时候,是不是面试官常问一个问题如何保证集群环境下数据操作并发问题,常用的synchronized肯定是无法满足了,或许你可以借助for update对数据加锁。本文的最终解决方式你只要在方...
  • partner4java
  • partner4java
  • 2016年08月13日 13:57
  • 6801

Java 同步原语 synchronized 剖析和锁优化

本文解析了 synchronized 的底层实现,介绍了 JVM 中优化锁的一些方法,以及实际编程中使用的一些锁优化方法。...
  • hustspy1990
  • hustspy1990
  • 2017年09月10日 10:36
  • 355
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 之 Lock 同步锁学习示例
举报原因:
原因补充:

(最多只允许输入30个字)