Java线程同步之重入锁

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错
Java线程同步除了原子变量,synchronized之外还可以使用重入锁来完成线程的同步。重入锁 使用java.util.concurrent.locks下面的Locks类。

相关阅读:

Java Hashtable多线程操作遍历问题 http://www.linuxidc.com/Linux/2013-01/78574.htm

Java多线程顺序执行 http://www.linuxidc.com/Linux/2012-07/65033.htm

Java多线程问题之同步器CyclicBarrier http://www.linuxidc.com/Linux/2012-07/64593.htm

Java多线程之wait()和notify() http://www.linuxidc.com/Linux/2012-03/57067.htm

Java多线程之synchronized http://www.linuxidc.com/Linux/2012-03/57068.htm

Java多线程之并发锁 http://www.linuxidc.com/Linux/2012-03/57069.htm

 
下面演示Locks 的使用。代码如下:

package com.Android.test;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

 /*
  重入锁的使用方式如下:
  Lock l = …;
    l.lock();
    try {
        // access the resource protected by this lock
    } finally {
        l.unlock();
    }
  */

public class ReentrantLockDemo implements Runnable {
 private int number = 0;
 // 定义一个重入锁
 private Lock lock = new ReentrantLock();
 @Override
 public void run() {
  // TODO Auto-generated method stub
  lock.lock();
  try {
   for (int i = 0; i < 5; i++) {
    try {
     Thread.sleep(1000);
    } catch (InterruptedException e) {
     // TODO: handle exception
     e.printStackTrace();
    }
    System.out.println(Thread.currentThread().getName() + “:” + number++);
   }
  } finally{
   lock.unlock();
  }
 }
 
 public static void main(String [] args){
  ReentrantLockDemo run = new ReentrantLockDemo();
  Thread thread1 = new Thread(run);
  Thread thread2 = new Thread(run);
 
  thread1.start();
  thread2.start();
 }
}

运行结果如下:
 
Thread-0:0
 Thread-0:1
 Thread-0:2
 Thread-0:3
 Thread-0:4
 Thread-1:5
 Thread-1:6
 Thread-1:7
 Thread-1:8
 Thr

未经允许不得转载:演道网 » Java线程同步之重入锁

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册