• Java 多线程加锁


    以前的同步操作 基本上都是用到 synchronized 关键字,类似代码如下:

    synchronized(obj){

    //dosomething...

    }来做到同步,

    在 JDK5.0 里面有这么一个对象,ReentrantLock,发觉她的加锁编程的方式非常的适合日常的加锁习惯,

    EG:

    package com.thread.synchronise;

    import java.util.concurrent.locks.ReentrantLock;

    public class SynchroTest extends Thread{
    private int count = 0;
    private final ReentrantLock lock = new ReentrantLock();

    public void run()
    {

    //这里加了几次锁,在后面就的要相应的解锁 几次
          lock.lock(); // block until condition holds
          try {    
         count++;
         System.out.println(" count = "+count);
         try {
         Thread.sleep(3000);
        } catch (InterruptedException e) {
         e.printStackTrace();
        }
         System.out.println(" count = "+count);
          } finally {
         lock.unlock();
          }
    }
    /**
    * @param args
    */
    public static void main(String[] args) {
       // TODO Auto-generated method stub
       SynchroTest st1 = new SynchroTest();
    //   SynchroTest st2 = new SynchroTest();
    //   SynchroTest st3 = new SynchroTest();
      

    //这里不能够调用    new Thread(st1).run();方法,否则就不是多线程的了
       new Thread(st1).start();
       new Thread(st1).start();
       new Thread(st1).start();
    }

    }

    如果该线程等待某暂时获取不到的资源,那么我们可以用Condition Object来避免死锁情况。
    sufficientFunds = lock .newCondition();
    如果条件不满足:
    sufficientFunds.await();
    这时线程就会释放锁并进入blocked状态,其他线程就有机会执行操作。当其他线程执行完后,就可通知等待的线程继续执行它的操作了:
    sufficientFunds.signalAll();
  • 相关阅读:
    silverlight 网站 iis发布
    使用PerfView诊断.Net GC的问题
    七种方法实现单例模式
    java多线程的学习之路(二)
    java多线程的学习之路(一)
    几种特殊的二叉树
    解析json字符串,把json字符串转换成Java对象
    KMP算法的理解
    常用 Git 命令清单
    Jquery.cookie.js 源码和使用方法
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400704.html
Copyright © 2020-2023  润新知