现在的位置: 首页 > 综合 > 正文

Java中Lock的使用

2018年06月05日 ⁄ 综合 ⁄ 共 906字 ⁄ 字号 评论关闭

Lock和Synchronized的功能类似,都可以实现线程的同步,但是Lock比Synchronized方式更加面向对象,与生活中的锁类似,这个Lock锁是上在代表要操作的资源的类的内部方法中,而不是线程代码中,它可以更优雅的处理线程同步问题。

测试:

public class LockTest {
	
	public static void main(String[] args) {
		
		final ShowName showName = new ShowName();
		
		/*创建第一个线程*/
		new Thread(new Runnable(){
			@Override
			public void run() {
				while(true){
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					showName.display("李克强");
				}
				
			}
		}).start();
		
		/*创建第二个线程*/
		new Thread(new Runnable(){
			@Override
			public void run() {
				while(true){
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					showName.display("习近平");
				}
				
			}
		}).start();
	}
	

	static class ShowName{
		/*创建一个锁*/
		Lock lock = new ReentrantLock();
		
		public void display(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{
				/*解锁【这句代码,一定要放在finally中,以防锁住的代码抛出异常而发生死锁】*/
				lock.unlock();
			}
		}
		
	}
}

成上面程序所得的结果可以看出:Lock可以实现和Synchronized同样的效果,而且很好理解。

【上篇】
【下篇】

抱歉!评论已关闭.