zoukankan      html  css  js  c++  java
  • Java多线程中使用ReentrantLock、synchronized加锁 简单举例

    public class Demo {
    
        final static Lock lock = new ReentrantLock();
        
        public static void test(Long userId) throws InterruptedException {
            System.out.println("------线程开始进入-----" + new Date());
            lock.lock();
            try {
                System.err.println("打印..." + new Date());
                Thread.sleep(5000);
            } catch (Exception e) {
            }finally {
                lock.unlock();    //必须在finally中解锁
            }
        }
        
        public static void test2(Long userId) throws InterruptedException {
            System.out.println("------线程开始进入-----" + new Date());
            synchronized (String.valueOf(userId).intern()) {
                System.err.println("打印..." + new Date());
                Thread.sleep(5000);
            }
        }
    
        public static void main(String[] srrt) {
            for(int i = 0;i < 3;i++) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            test2(1234L);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
        }
    }

    1、ReentrantLock支持对异常的处理。

    2、synchronized不支持对异常的处理,但支持对特定的某一对象值加锁。

  • 相关阅读:
    网络编程
    C 语言 const
    C 语言 链表
    C 语言 按位计算
    C 语言 格式化输出输入
    C 语言 结构类型 联合
    C 语言 结构类型 结构
    C 语言 结构类型 枚举
    bash shell configuration
    sed usage
  • 原文地址:https://www.cnblogs.com/yanketao/p/10836722.html
Copyright © 2011-2022 走看看