*多线程锁实现类

  1 import android.os.SystemClock;
  2 public class ConditionVariable
  3 {
  4     private volatile boolean mCondition;
  5     public ConditionVariable()
  6     {
  7         mCondition = false;
  8     }
  9     public ConditionVariable(boolean state)
 10     {
 11         mCondition = state;
 12     }
 13     public void unlock()
 14     {
 15         synchronized (this)
 16         {
 17             boolean old = mCondition;
 18             mCondition = true;
 19             if (!old)
 20                 this.notifyAll();
 21         }
 22     }
 23     public void lock()
 24     {
 25         synchronized (this)
 26         {
 27             boolean old = mCondition;
 28             mCondition = false;
 29             if (old)
 30                 this.notifyAll();
 31         }
 32     }
 33     /**
 34      * 阻塞 直到 unlock
 35      */
 36     public void blockIflock()
 37     {
 38         synchronized (this)
 39         {
 40             while (!mCondition)
 41             {
 42                 try
 43                 {
 44                     this.wait();
 45                 } catch (InterruptedException e)
 46                 {
 47                 }
 48             }
 49         }
 50     }
 51     /**
 52      * 阻塞 直到 unlock 或 timeout
 53      *
 54      * @param timeout
 55      * @return isTimeout
 56      */
 57     public boolean blockIflock(long timeout)
 58     {
 59         if (timeout != 0)
 60         {
 61             synchronized (this)
 62             {
 63                 long now = SystemClock.elapsedRealtime();
 64                 long end = now + timeout;
 65                 while (!mCondition && now < end)
 66                 {
 67                     try
 68                     {
 69                         this.wait(end - now);
 70                     } catch (InterruptedException e)
 71                     {
 72                     }
 73                     now = SystemClock.elapsedRealtime();
 74                 }
 75                 return !mCondition;
 76             }
 77         } else
 78         {
 79             this.blockIflock();
 80             return false;
 81         }
 82     }
 83     /**
 84      * 阻塞 直到 lock
 85      */
 86     public void blockIfUnlock()
 87     {
 88         synchronized (this)
 89         {
 90             while (mCondition)
 91             {
 92                 try
 93                 {
 94                     this.wait();
 95                 } catch (InterruptedException e)
 96                 {
 97                 }
 98             }
 99         }
100     }
101     /**
102      * 阻塞 直到 lock 或 timeout
103      *
104      * @param timeout
105      * @return isTimeout
106      */
107     public boolean blockIfUnlock(long timeout)
108     {
109         if (timeout != 0)
110         {
111             synchronized (this)
112             {
113                 long now = SystemClock.elapsedRealtime();
114                 long end = now + timeout;
115                 while (mCondition && now < end)
116                 {
117                     try
118                     {
119                         this.wait(end - now);
120                     } catch (InterruptedException e)
121                     {
122                     }
123                     now = SystemClock.elapsedRealtime();
124                 }
125                 return mCondition;
126             }
127         } else
128         {
129             this.blockIfUnlock();
130             return false;
131         }
132     }
133     public boolean isUnlock()
134     {
135         return mCondition;
136     }
137 }
时间: 2024-08-28 20:44:10

*多线程锁实现类的相关文章

从头认识多线程-2.2 synchronized持有对象锁与类锁的相同点

这一章节我们来讨论一下synchronized持有对象锁与类锁的相同点. 1.当所有方法都不使用同步的时候 代码清单 package com.ray.deepintothread.ch02.topic_2; public class SynchInstance1 { public static void main(String[] args) throws InterruptedException { MyTestObjectOne myTestObjectOne = new MyTestObj

Java对象锁和类锁全面解析(多线程synchronized关键字)

最近工作有用到一些多线程的东西,之前吧,有用到synchronized同步块,不过是别人怎么用就跟着用,并没有搞清楚锁的概念.最近也是遇到一些问题,不搞清楚锁的概念,很容易碰壁,甚至有些时候自己连用没用对都不知道. 今天把一些疑惑都解开了,写篇文章分享给大家,文章还算比较全面.当然可能有小宝鸽理解得不够深入透彻的地方,如果说得不正确还望指出. 看之前有必要跟某些猿友说一下,如果看一遍没有看明白呢,也没关系,当是了解一下,等真正使用到了,再回头看. 本文主要是将synchronized关键字用法作

从头认识多线程-2.3 synchronized持有对象锁与类锁的不同点

这一章节我们来讨论游戏,synchronized持有对象锁与类锁的不同点-两种锁是并行的东西,没有交集. 1.同步持有对象锁或者类锁 package com.ray.deepintothread.ch02.topic_3; public class SynchInstance5 { public static void main(String[] args) throws InterruptedException { MyTestObjectFive myTestObjectFive = new

Java进阶(8) - 并发(多线程锁类)

一共有3类锁 ,方法锁.对象锁.类锁.(方法锁也是对象锁的一种)一.对象锁对象锁public class object {private Lock lock = new ReentrantLock();//JavaSE1.5.新增了一个java.util.concurrent包来支持同步public void method(){synchronized(this){System.out.println("我是对象锁");}}} public synchronized void meth

synchronized与static synchronized 的差别、synchronized在JVM底层的实现原理及Java多线程锁理解

本Blog分为例如以下部分: 第一部分:synchronized与static synchronized 的差别 第二部分:JVM底层又是怎样实现synchronized的 第三部分:Java多线程锁,源码剖析 第一部分:synchronized与static synchronized的差别 1.synchronized与static synchronized 的差别 synchronized是对类的当前实例进行加锁,防止其它线程同一时候訪问该类的该实例的全部synchronized块.注意这里

synchronized与static synchronized 的区别、synchronized在JVM底层的实现原理及Java多线程锁理解

本Blog分为如下部分: 第一部分:synchronized与static synchronized 的区别 第二部分:JVM底层又是如何实现synchronized的 第三部分:Java多线程锁,源代码剖析 第一部分:synchronized与static synchronized的区别 1.synchronized与static synchronized 的区别 synchronized是对类的当前实例进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块,注意这里是"类

【Thread】java线程之对象锁、类锁、线程安全

说明: 1.个人技术也不咋滴.也没在项目中写过线程,以下全是根据自己的理解写的.所以,仅供参考及希望指出不同的观点. 2.其实想把代码的github贴出来,但还是推荐在初学的您多亲自写一下,就没贴出来了. 一.基本说明 类.对象:...(不知道怎么说,只可意会不可言传>.<!):要明白哪些方法.变量是对象的,哪些是类的. 类锁.对象锁:对应类和对象.每个类有且仅有一个类锁,每个对象有且仅有一个对象锁. ex: Person p1 = new Person(); Person p2 = new

个人笔记--多线程(锁)

死锁:就是同步方法中有同步代码块,或反之. 例子: public class DeadLock { public static String obj1 = "obj1"; public static String obj2 = "obj2"; public static void main(String[] args){ Thread a = new Thread(new Lock1()); Thread b = new Thread(new Lock2()); a

synchronize——对象锁和类锁

最近在研究Java 多线程的只是,经常能看到synchronize关键字,以前只是一眼带过,没有细究,今天趁这个机会,整理下 synchronize作为多线程关键字,是一种同步锁,它可以修饰以下几种对象: 代码块:被修饰的代码块称为同步语句块,其作用的范围是大括号{ }里的代码,作用的对象是调用这个代码块的对象: 方法:被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象 静态方法:作用的范围是整个静态方法,作用的对象是这个类的所有对象 类:作用的范围是synchro