From 2e54d543cf75df4f375f9c949ec27e9be27e4f79 Mon Sep 17 00:00:00 2001 From: thatwhy <843279946@qq.com> Date: Sun, 29 Dec 2019 15:30:31 +0800 Subject: [PATCH] week_03 057 --- week_03/57/AQS-057.txt | 136 ++++++++++++++++++ ...\255\230\346\250\241\345\236\213-057.docx" | Bin 0 -> 68946 bytes week_03/57/ReentrantLock-057.txt | 45 ++++++ week_03/57/Semaphore-057.txt | 99 +++++++++++++ week_03/57/synchronized-057.txt | 9 ++ week_03/57/volatile-057.txt | 7 + ...5\270\203\345\274\217\351\224\201-057.txt" | 14 ++ 7 files changed, 310 insertions(+) create mode 100644 week_03/57/AQS-057.txt create mode 100644 "week_03/57/Java\345\206\205\345\255\230\346\250\241\345\236\213-057.docx" create mode 100644 week_03/57/ReentrantLock-057.txt create mode 100644 week_03/57/Semaphore-057.txt create mode 100644 week_03/57/synchronized-057.txt create mode 100644 week_03/57/volatile-057.txt create mode 100644 "week_03/57/\345\210\206\345\270\203\345\274\217\351\224\201-057.txt" diff --git a/week_03/57/AQS-057.txt b/week_03/57/AQS-057.txt new file mode 100644 index 0000000..e435db2 --- /dev/null +++ b/week_03/57/AQS-057.txt @@ -0,0 +1,136 @@ +1.为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁定和相关同步器(信号量、事件,等等)提供一个框架。 +此类的设计目标是成为依靠单个原子 int 值来表示状态的大多数同步器的一个有用基础。 +子类必须定义更改此状态的受保护方法,并定义哪种状态对于此对象意味着被获取或被释放。 +假定这些条件之后,此类中的其他方法就可以实现所有排队和阻塞机制。 +子类可以维护其他状态字段, +但只是为了获得同步而只追踪使用 getState()、setState(int) 和 +compareAndSetState(int, int) 方法来操作以原子方式更新的 int 值。 + + +2.protected final int getState() { + return state; + } + + 返回同步状态的当前值。此操作具有 volatile 读的内存语义。 + + 返回: + 当前状态值 + protected final void setState(int newState) { + state = newState; + } + +3.protected final boolean compareAndSetState(int expect, int update) { + // See below for intrinsics setup to support this + return unsafe.compareAndSwapInt(this, stateOffset, expect, update); + } + + + 如果当前状态值等于预期值,则以原子方式将同步状态设置为给定的更新值。此操作具有 volatile 读和写的内存语义。 + +4.protected boolean tryAcquire(int arg) { + throw new UnsupportedOperationException(); + } + 试图在独占模式下获取对象状态。此方法应该查询是否允许它在独占模式下获取对象状态,如果允许,则获取它。 +此方法总是由执行 acquire 的线程来调用。如果此方法报告失败, +则 acquire 方法可以将线程加入队列(如果还没有将它加入队列), +直到获得其他某个线程释放了该线程的信号。可以用此方法来实现 Lock.tryLock() 方法。 + +5. protected boolean tryRelease(int arg) { + throw new UnsupportedOperationException(); + } + 试图在共享模式下获取对象状态。此方法应该查询是否允许它在共享模式下获取对象状态,如果允许,则获取它。 +此方法总是由执行 acquire 线程来调用。如果此方法报告失败,则 acquire 方法可以将线程加入队列(如果还没有将它加入队列), +直到获得其他某个线程释放了该线程的信号。 + +6.protected boolean tryReleaseShared(int arg) { + throw new UnsupportedOperationException(); + } + 试图设置状态来反映共享模式下的一个释放。 +此方法总是由正在执行释放的线程调用。 + +7.protected boolean isHeldExclusively() { + throw new UnsupportedOperationException(); + } + 如果对于当前(正调用的)线程,同步是以独占方式进行的,则返回 true。 + 此方法是在每次调用非等待 AbstractQueuedSynchronizer.ConditionObject 方法时调用的。(等待方法则调用 release(int)。) + +8. public final void acquire(int arg) { + if (!tryAcquire(arg) && + acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) + selfInterrupt(); + } +以独占模式获取对象,忽略中断。通过至少调用一次 tryAcquire(int) 来实现此方法,并在成功时返回。 +否则在成功之前,一直调用 tryAcquire(int) 将线程加入队列,线程可能重复被阻塞或不被阻塞。 +可以使用此方法来实现 Lock.lock() 方法 + +9.public final void acquireInterruptibly(int arg) + throws InterruptedException { + if (Thread.interrupted()) + throw new InterruptedException(); + if (!tryAcquire(arg)) + doAcquireInterruptibly(arg); + } + 以独占模式获取对象,如果被中断则中止。通过先检查中断状态,然后至少调用一次 tryAcquire(int) 来实现此方法, + 并在成功时返回。否则在成功之前,或者线程被中断之前,一直调用 tryAcquire(int) 将线程加入队列, + 线程可能重复被阻塞或不被阻塞。可以使用此方法来实现 Lock.lockInterruptibly() 方法。 + +10. public final boolean tryAcquireNanos(int arg, long nanosTimeout) + throws InterruptedException { + if (Thread.interrupted()) + throw new InterruptedException(); + return tryAcquire(arg) || + doAcquireNanos(arg, nanosTimeout); + }试图以独占模式获取对象,如果被中断则中止,如果到了给定超时时间,则会失败。 + 通过先检查中断状态,然后至少调用一次 tryAcquire(int) 来实现此方法,并在成功时返回。 + 否则,在成功之前、线程被中断之前或者到达超时时间之前,一直调用 tryAcquire(int) 将线程加入队列, + 线程可能重复被阻塞或不被阻塞。可以用此方法来实现 Lock.tryLock(long, TimeUnit) 方法。 + +11.public final boolean release(int arg) { + if (tryRelease(arg)) { + Node h = head; + if (h != null && h.waitStatus != 0) + unparkSuccessor(h); + return true; + } + return false; + } + 以独占模式释放对象。如果 tryRelease(int) 返回 true,则通过消除一个或多个线程的阻塞来实现此方法。 + 可以使用此方法来实现 Lock.unlock() 方法 + +12.public final void acquireShared(int arg) { + if (tryAcquireShared(arg) < 0) + doAcquireShared(arg); + } + 以共享模式获取对象,忽略中断。通过至少先调用一次 tryAcquireShared(int) 来实现此方法, + 并在成功时返回。否则在成功之前,一直调用 tryAcquireShared(int) 将线程加入队列,线程可能重复被阻塞或不被阻塞。 + +13.public final void acquireSharedInterruptibly(int arg) + throws InterruptedException { + if (Thread.interrupted()) + throw new InterruptedException(); + if (tryAcquireShared(arg) < 0) + doAcquireSharedInterruptibly(arg); + } +以共享模式获取对象,如果被中断则中止。通过先检查中断状态,然后至少调用一次 tryAcquireShared(int) 来实现此方法, +并在成功时返回。否则在成功或线程被中断之前,一直调用 tryAcquireShared(int) 将线程加入队列,线程可能重复被阻塞或不被阻塞。 + +14.public final boolean tryAcquireSharedNanos(int arg, long nanosTimeout) + throws InterruptedException { + if (Thread.interrupted()) + throw new InterruptedException(); + return tryAcquireShared(arg) >= 0 || + doAcquireSharedNanos(arg, nanosTimeout); + } +试图以共享模式获取对象,如果被中断则中止,如果到了给定超时时间,则会失败。 +通过先检查中断状态,然后至少调用一次 tryAcquireShared(int) 来实现此方法,并在成功时返回。 +否则在成功之前、线程被中断之前或者到达超时时间之前,一直调用 tryAcquireShared(int) 将线程加入队列,线程可能重复被阻塞或不被阻塞。 + +15.public final boolean releaseShared(int arg) { + if (tryReleaseShared(arg)) { + doReleaseShared(); + return true; + } + return false; + } + 以共享模式释放对象。如果 tryReleaseShared(int) 返回 true,则通过消除一个或多个线程的阻塞来实现该方法。 + diff --git "a/week_03/57/Java\345\206\205\345\255\230\346\250\241\345\236\213-057.docx" "b/week_03/57/Java\345\206\205\345\255\230\346\250\241\345\236\213-057.docx" new file mode 100644 index 0000000000000000000000000000000000000000..96e1281a79f9d94d3d44d805d26d9730da20102f GIT binary patch literal 68946 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%0Dc*S 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 0; + } + 仅在调用时此信号量中有给定数目的许可时,才从此信号量中获取这些许可。 + public boolean tryAcquire(int permits) { + if (permits < 0) throw new IllegalArgumentException(); + return sync.nonfairTryAcquireShared(permits) >= 0; + } + 如果在给定的等待时间内此信号量有可用的所有许可,并且当前线程未被中断,则从此信号量获取给定数目的许可。 + public boolean tryAcquire(int permits, long timeout, TimeUnit unit) + throws InterruptedException { + if (permits < 0) throw new IllegalArgumentException(); + return sync.tryAcquireSharedNanos(permits, unit.toNanos(timeout)); + } + +5.释放方法 + 释放一个许可,将其返回给信号量。 + public void release() { + sync.releaseShared(1); + } + 释放给定数目的许可,将其返回到信号量。 + public void release(int permits) { + if (permits < 0) throw new IllegalArgumentException(); + sync.releaseShared(permits); + } \ No newline at end of file diff --git a/week_03/57/synchronized-057.txt b/week_03/57/synchronized-057.txt new file mode 100644 index 0000000..9d2486c --- /dev/null +++ b/week_03/57/synchronized-057.txt @@ -0,0 +1,9 @@ +1.synchronized:jvm关键字 +monitorenter,底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象只有在同 +步或方法中才能掉wait/notify等方法 + +2.sychronized不需要用户取手动释放锁,当synchronized代码执行完后系统会自动让线程释放对锁的占用 + +3.synchronized不可中断,除非抛出异常或者正常运行完成 + +4.为非公平锁 \ No newline at end of file diff --git a/week_03/57/volatile-057.txt b/week_03/57/volatile-057.txt new file mode 100644 index 0000000..a15ce1c --- /dev/null +++ b/week_03/57/volatile-057.txt @@ -0,0 +1,7 @@ +1.volatile时java虚拟机提供的轻量级同步机制 +三个特点: + 1.保证可见性:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改的值 + 2.不保证原子性:原子性:不可分割、完整性,即某个线程正在做某个具体业务时,中间不可以被加塞或者被分割,需要整体完 + 整,要么同时成功,要么同时失败 + 3.禁止指令重排:多线程环境中线程交替执行,由于编译器优化重排的存在,两个线程中使用的变量能否保证一致性时无法确定 + 的,结果无法预测 \ No newline at end of file diff --git "a/week_03/57/\345\210\206\345\270\203\345\274\217\351\224\201-057.txt" "b/week_03/57/\345\210\206\345\270\203\345\274\217\351\224\201-057.txt" new file mode 100644 index 0000000..079736e --- /dev/null +++ "b/week_03/57/\345\210\206\345\270\203\345\274\217\351\224\201-057.txt" @@ -0,0 +1,14 @@ + + +特点: + 互斥性:和我们本地锁一样互斥性是最基本,但是分布式锁需要保证在不同节点的不同线程的互斥。 + 可重入性:同一个节点上的同一个线程如果获取了锁之后那么也可以再次获取这个锁。 + 锁超时:和本地锁一样支持锁超时,防止死锁。 + 高效,高可用:加锁和解锁需要高效,同时也需要保证高可用防止分布式锁失效,可以增加降级。 + 支持阻塞和非阻塞:和ReentrantLock一样支持lock和trylock以及tryLock(long timeOut)。 + 支持公平锁和非公平锁(可选):公平锁的意思是按照请求加锁的顺序获得锁,非公平锁就相反是无序的。这个一般来说实现的比较少。 + +几种实现方式: + 1.MySql + 2.Zk + 3.Redis \ No newline at end of file -- Gitee