- 浏览: 265481 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (298)
- 工作感悟 (6)
- java基础 (23)
- 计算机硬件知识 (1)
- 计算机网络知识 (2)
- Struts (3)
- Srping (4)
- hibernate (0)
- ibatis (0)
- webservice (4)
- Thread (22)
- maven (5)
- ubuntu/linux/centos/redhat (46)
- SSO (1)
- ESB (0)
- 工作流 (0)
- oracle (15)
- 云计算 (1)
- hadoop (1)
- nosql (0)
- mysql (3)
- sqlserver (0)
- jquery (0)
- 分布式 (3)
- 集群 (0)
- 设计模式 (2)
- EJB (0)
- map (0)
- cache (5)
- Niginx+varnish+squid+Ats (14)
- Apache (0)
- 工作/职业规划 (0)
- Scala & Groovy (1)
- English (4)
- 数据结构/算法 (6)
- 开发工具 (5)
- 测试 (2)
- Exception (0)
- 定时器 (3)
- j2ee (2)
- 部署 (1)
- Openssl (1)
- 操作系统 (3)
- kvm (13)
- libvirt (5)
- PostgreSql (5)
- 虚拟化 (3)
- 概念理解 (1)
- virt-manager (1)
- RESTful (3)
- 其它 (4)
- ssh2 (14)
- windows (1)
- 房产 (2)
- svn (1)
- 手机 (1)
- ant (1)
- flume (2)
- sqoop (1)
- fastdfs (5)
- log4j (1)
- SPDY (1)
- mongodb (2)
- MQ (2)
- Mina (1)
- dubbo (4)
- PMP (1)
- Webshpere (2)
- jvm (1)
- Btrace (1)
- zookeeper (7)
- UML (1)
- spring cloud (6)
- spring boot (5)
- storm (0)
- 软件管理 (1)
- elasticsearch (1)
- 协议 (2)
- docker (1)
- 性能 (2)
- 安全 (1)
- 代码规范 (1)
- mqtt (1)
- lombok (1)
- 车联网 (1)
- kafka (1)
最新评论
lockInterruptibly 与 lock比较区别在于
lockInterruptibly 优先考虑响应中断,而不是响应锁定的普通获取或重入获取
如果a处 是lock.lock();
输出
Thread-0 running
(这里休眠了20s)
Thread-0 finished
Thread-1 running
Thread-1 interrupted
============================
如果a处是lock.lockInterruptibly()
Thread-0 running
Thread-1 interrupted
(这里休眠了20s)
Thread-0 finished
=========================
如果a处是lock.tryLock();
Thread-1 running
Thread-0 running
(这里休眠了20s)
Thread-1 finished
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.unlock(Unknown Source)
at test.RunIt3.run(TTTT.java:32)
at java.lang.Thread.run(Unknown Source)
=========================
如果a处是lock.tryLock(10,TimeUnit.SECONDS);
Thread-0 running
(这里休眠了10s)
Thread-1 running
(这里休眠了10s)
Thread-0 finished
(这里休眠了10s)
Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.unlock(Unknown Source)
at test.RunIt3.run(TTTT.java:32)
at java.lang.Thread.run(Unknown Source)
lockInterruptibly 优先考虑响应中断,而不是响应锁定的普通获取或重入获取
package test; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class TTTT { public static void main(String[] args){ Thread i1 = new Thread(new RunIt3()); Thread i2 = new Thread(new RunIt3()); i1.start(); i2.start(); i2.interrupt(); } } class RunIt3 implements Runnable{ private static Lock lock = new ReentrantLock(); public void run(){ try{ //---------------------------------a lock.lock(); //lock.lockInterruptibly(); System.out.println(Thread.currentThread().getName() + " running"); TimeUnit.SECONDS.sleep(20); lock.unlock(); System.out.println(Thread.currentThread().getName() + " finished"); } catch (InterruptedException e){ System.out.println(Thread.currentThread().getName() + " interrupted"); } } }
如果a处 是lock.lock();
输出
Thread-0 running
(这里休眠了20s)
Thread-0 finished
Thread-1 running
Thread-1 interrupted
============================
如果a处是lock.lockInterruptibly()
Thread-0 running
Thread-1 interrupted
(这里休眠了20s)
Thread-0 finished
=========================
如果a处是lock.tryLock();
Thread-1 running
Thread-0 running
(这里休眠了20s)
Thread-1 finished
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.unlock(Unknown Source)
at test.RunIt3.run(TTTT.java:32)
at java.lang.Thread.run(Unknown Source)
=========================
如果a处是lock.tryLock(10,TimeUnit.SECONDS);
Thread-0 running
(这里休眠了10s)
Thread-1 running
(这里休眠了10s)
Thread-0 finished
(这里休眠了10s)
Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.unlock(Unknown Source)
at test.RunIt3.run(TTTT.java:32)
at java.lang.Thread.run(Unknown Source)
发表评论
-
Java通过Executors提供四种线程池
2017-09-27 10:21 468Java通过Executors提供四种线程池,分别为: new ... -
并发线程组件 Amino
2013-07-23 13:29 695Amino CBB (Concurrent Building ... -
Java多线程之Semaphore
2013-07-17 16:12 582import java.util.ArrayL ... -
ThreadLocal的介绍(利用变量副本实现多线程访问同一变量)
2013-07-17 14:20 803早在Java 1.2推出之时,Ja ... -
ThreadGroup其实比ExecutorService更好
2013-07-17 13:32 702用java做抓取的时候免不了要用到多线程的了,因为要同时抓取多 ... -
Java多线程同步器
2013-07-12 17:00 861CyclcBarrier 在实际应用中,有时候需要多个线程 ... -
Java Thread.interrupt 害人! 中断JAVA线程
2013-07-12 16:37 768程序是很简易的。然而,在编程人员面前,多线程呈现出了一组新的难 ... -
Java多线程学习——Condition的使用
2013-07-12 14:36 836Condition 将 Object 监视器方法(wait、n ... -
java多线程设计wait
2013-07-12 14:30 695在Java中,这个机制的实 ... -
Monitor
2013-07-12 10:44 15351. 什么是Monitor? Monitor其实是一 ... -
处理 子线程的返回值
2013-07-08 14:19 861package com.jimmy.Thread.Conc ... -
ExecutorService的execute和submit方法
2013-07-05 17:21 1033因为之前一直是用的exec ... -
Exchanger-兄弟线程的信息交换
2013-07-05 16:23 697如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使 ... -
慎重使用volatile关键字
2013-06-26 11:10 744volatile关键字相信了解Java多线程的读者都很清楚它的 ... -
对synchronized(this)的一些理解
2013-06-26 10:18 675一、当两个并发线程访问同一个对象object中的这个synch ... -
java中的lock和synchronized区别
2013-06-26 10:02 5901、ReentrantLock 拥有Synchronized相 ... -
线程sleep,join,yield的区别
2013-06-21 17:37 5141.sleep() 使当前线程(即调用该方法的线程)暂停执行 ... -
初学Java多线程:慎重使用volatile关键字
2013-02-25 15:18 694学习Java多线程中会遇到使用volatile关键字的情况。v ... -
java之yield(),sleep(),wait()区别详解-备忘笔记
2013-02-25 14:32 6351、sleep() 使当前线程(即调用该方法的线程)暂停执行 ... -
Java Thread join() 的用法
2013-02-25 13:24 588Java Thread中, join() 方法主要是让调用改方 ...
相关推荐
**Lock与synchronized的区别** 1. **显式与隐式**:`synchronized`是Java语言内置的,使用起来更简单,但控制相对较少。而`Lock`是通过调用接口方法来获取和释放锁,更加显式。 2. **异常处理**:在`Lock`中,如果...
Java 中的 Lock 和 Synchronized 的区别 Java 语言中有很多相似关键字或相似意义的字,但 lock 和 synchronized 是两个最容易混淆的关键字。它们都是锁的意思,都是为了线程安全性、应用合理性和运行效率的。下面...
本文将深入探讨两种主要的锁机制:`synchronized`关键字和`Lock`接口,以及它们各自的特点、应用场景和使用方式。 一、Synchronized `synchronized`是Java中的一个内置关键字,用于提供线程安全。它的主要作用是...
#### 三、Lock与synchronized的区别 - **锁的管理**:`synchronized`的锁是由JVM自动管理的,因此开发者无需担心锁的释放问题。而`Lock`需要手动管理,如果在执行过程中发生异常导致未能正确释放锁,则可能导致死锁...
Lock接口提供了比synchronized更丰富的功能,如尝试获取锁(tryLock)、可中断的锁获取(lockInterruptibly)、超时获取锁(tryLock(long time, TimeUnit unit))以及显式解锁(unlock)。Lock接口的实现类,例如...
2. lockInterruptibly():与lock()类似,但当线程被中断时会抛出InterruptedException。 3. tryLock():尝试获取锁,如果成功则立即返回true,否则返回false,不会阻塞。 4. unlock():释放锁,必须在获取锁后调用,...
Java中的Lock类与Condition类是Java并发编程的重要组成部分,它们为多线程环境下的同步提供了更为灵活和强大的控制。在JDK 1.5及之后的版本中,Lock类作为替代synchronized关键字的一种方式出现,提供了更精细的锁...
下面将详细解释`Lock`接口以及与`synchronized`的区别。 `Lock`接口是锁的抽象,它提供了更加灵活和细粒度的控制。`ReentrantLock`是`Lock`接口的主要实现类,支持可重入性,即线程可以多次获取同一锁,只要在每次...
Java Lock与Condition是Java并发编程中的重要概念,它们提供了比synchronized关键字更细粒度的控制,从而使得多线程程序的设计和管理更加灵活高效。本文将深入探讨ReentrantLock(可重入锁)和Condition的基本原理、...
Lock 和 Synchronized Block 的区别 在之前的文章中,我们讲到了使用 Synchronized Block 来实现 Java 的同步。但是,为什么会引入新的 Lock 呢?主要有以下几点区别: * Synchronized Block 只能写在一个方法里面...
1. **使用方式**:`synchronized`是隐式同步,无需手动释放,而`Lock`是显式同步,需手动调用`lock()`和`unlock()`。 2. **控制能力**:`Lock`提供了更多控制选项,如可中断、可选择公平性、锁分离等。 3. **异常...
2. `void lockInterruptibly() throws InterruptedException`: 与`lock()`类似,但当线程被中断时会抛出`InterruptedException`,并释放锁,允许线程处理中断请求。 3. `boolean tryLock()`: 尝试获取锁,如果锁可用...
然而,它们在特性和使用上存在显著的区别。 首先,Lock是一个接口,它提供了比synchronized更细粒度的控制。synchronized是Java语言的关键字,它的使用更为简单,但灵活性较低。Lock接口由Java并发包java.util....
- Lock、tryLock和lockInterruptibly:Lock接口提供了比synchronized更细粒度的锁控制,tryLock尝试获取锁,lockInterruptibly允许被中断。 5. **并发与JUC**: - JUC(Java Util Concurrency)包包含各种并发...
本案例"locktest.zip"主要探讨了线程安全中的Lock机制,以及它与synchronized关键字的区别,并通过实例展示了Lock如何实现线程的等待通知和顺序执行。 首先,让我们理解什么是Lock。在Java中,`java.util....
本章着重于展示如何使用显示锁(也称为高级锁),并详细介绍了Lock和ReentrantLock接口以及它们在并发控制中的应用。以下是基于章节标题和部分描述的关键知识点: ### 1. Lock和ReentrantLock #### 1.1 锁接口...
2. **中断性**:synchronized无法中断正在等待锁的线程,而Lock接口提供了`lockInterruptibly()`方法,允许外部中断正在等待锁的线程,增加了灵活性。 3. **超时等待**:Lock接口提供了`tryLock(long timeout, ...
与synchronized不同,Lock可以实现尝试获取锁(tryLock())和可中断的锁等待(lockInterruptibly()),这对于复杂并发控制和异常处理提供了更大的灵活性。 再深入一点,AbstractQueuedSynchronizer(AQS)是Java并...