• 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不支持对异常的处理,但支持对特定的某一对象值加锁。

  • 相关阅读:
    视图和触发器
    45题的难点
    表连接、Tsql基本编程和存储过程
    五种函数、子查询和分页查询
    语句创建数据库表及增删改查
    约束
    pyhton的参数类型
    python的数组与集合
    python基础--编码
    NSIS的Push与Pop
  • 原文地址:https://www.cnblogs.com/yanketao/p/10836722.html
Copyright © 2020-2023  润新知