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

  • 相关阅读:
    Sql Server截断日志(转)
    C#/VB.NET语法的比较(转)
    ReportViewer矩阵报表
    逐步学习 iPhone App 开发(1)
    一月二十四日,无家可归
    再见2009
    poj 1376 机器人广搜
    hdu 1004 颜色问题
    hdu 2734 简单地字符串处理
    1116 贪婪的送礼者
  • 原文地址:https://www.cnblogs.com/yanketao/p/10836722.html
Copyright © 2011-2022 走看看