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-ReentrantReadWriteLock的简单例子

内容:读锁时共享的,写锁时互斥的(可见运行结果),都是通过AQS实现的。 public class ReentrantReadWriteLockTest { static class MyOb...

如何在java中发起http和https请求

一般调用外部接口会需要用到http和https请求。 一.发起http请求 1.写http请求方法 //处理http请求 requestUrl为请求地址 requestMethod请求方式,值为"...

springboot+mybatis+SpringSecurity 实现用户角色数据库管理(一)

本文使用springboot+mybatis+SpringSecurity 实现用户权限数据库管理实现用户和角色用数据库存储,而资源(url)和权限的对应采用硬编码配置。 也就是角色可以访问的权限通过...

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

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

Java实现生产者与消费者(四)(多生产者与多消费者使用lock同步锁)

在jdk1.5 以后使用Lock 代替synchronized实现同步锁。synchronized一个锁只有一个监视器,而Lock锁可以有多个监视器,这样一个Lock锁上可以获取两组监视器分别监视生产...

java线程同步之Lock锁

Java并发编程:Lock   在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurren...

Java同步锁Lock的使用

Java同步锁Lock的使用

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

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

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

http://blog.csdn.net/ghsau/article/details/7461369 关注点:读写锁ReadWriteLock         Lo...
  • amingas
  • amingas
  • 2014年08月16日 20:40
  • 248

Java并发(四):Callable和Future、锁对象Lock-完美解决同步方式

Callable和FutureCallable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 之 Lock 同步锁学习示例
举报原因:
原因补充:

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