zoukankan      html  css  js  c++  java
  • Lock锁的使用示例

    Lock锁是java5用来代替synchronized的一种面向对象的锁的方案

     1 public class LockDemo {
     2     /**
     3      * Lock是用来替换synchronized, 优点是Lock 更加面向对象。eclipse查看接口所有的实现类用CTRL+T
     4      */
     5 
     6     public static void main(String[] args) {
     7         final OuterLoop loop = new OuterLoop();
     8 
     9         for (int i = 0; i < 100; i++) {
    10             new Thread(new Runnable() {
    11                 @Override
    12                 public void run() {
    13                     loop.outputlock("liqiushui");
    14                 }
    15             }).start();
    16 
    17             new Thread(new Runnable() {
    18                 @Override
    19                 public void run() {
    20                     loop.outputlock("wangchongyang");
    21                 }
    22             }).start();
    23         }
    24     }
    25 
    26 }
    27 
    28 class OuterLoop {
    29     // 使用synchronized锁
    30     public synchronized void output(String name) {
    31         for (int i = 0; i < name.length(); i++) {
    32             System.out.print(name.charAt(i));
    33         }
    34         System.out.println();
    35     }
    36 
    37     
    38     private Lock lock = new ReentrantLock();
    39     // 使用lock方式
    40     public void outputlock(String name) {
    41         // 错误,不能在此处创建锁。原因,每个线程过来都会创建一个自己的锁,就起不到锁的效果。需要提到方法外面
    42         // Lock lock = new ReentrantLock();
    43         
    44         // 使用lock方式
    45         lock.lock();
    46         try {
    47             for (int i = 0; i < name.length(); i++) {
    48                 System.out.print(name.charAt(i));
    49             }
    50             System.out.println();
    51         } finally {
    52             // 将解锁放在finally中目的是防止程序在运行过程中抛出异常或者return,而没有被执行到
    53             lock.unlock();
    54         }
    55     }
    56 
    57 }

    <完>

  • 相关阅读:
    自动控制基础MATLAB 2
    钽电容和瓷片电容的对比
    自动控制原理基础 matlab 1
    Altium使用总结1
    Altium 各个层的作用
    C语言联合体的灵活运用
    windows清除日志
    Lingo 优化实例 出版社问题
    Lingo 0-1规划
    用CMD分类
  • 原文地址:https://www.cnblogs.com/zhangshiwen/p/5043331.html
Copyright © 2011-2022 走看看