- 浏览: 84974 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (61)
- mysql数据库 浮点型数据查询 插入 (2)
- linux系统相关 (3)
- nginx (3)
- mysql 数据库查询 (2)
- java (13)
- 框架搭建 (0)
- jsp 页面传值总结 (2)
- bug解决 (4)
- js (2)
- ajax (2)
- 远程接口调用 (1)
- 页面美化 (4)
- spring (2)
- jquery validate (2)
- struts2 url 规范 (1)
- Log4j配置 (1)
- 数据结构 (1)
- 数据结构--算法 (1)
- 规划 (1)
- JSON传输,刷新 (1)
- java 中文乱码 (2)
- highcharts (0)
- get两次请求 相同的执行语句并行执行两次 而不是依次各执行一次 (1)
- 数据库配置文件异常处理 (1)
- spring MVC学习笔记 (1)
- 软交换与SIP实用技术 (0)
- socket (0)
- 数据库 (0)
- google map 多标记和信息显示 (1)
- 富客户端 (0)
- mysql 存储程序 (0)
- java 性能处理 (12)
- 并发 (12)
- 通信性能 (0)
- mina (0)
- 多线程 (11)
- postgreSql (1)
- 集群 (1)
- java 7 tutorial 文档翻译 (13)
- Basic I/O (0)
- Java Paltform Learning Path (0)
- 基础巩固 Building On the Foundation (0)
- Fervor Over Server 热衷服务器 (0)
最新评论
-
plumordy:
我也遇到这种问题,get中文参数乱码,在本地和一个服务器上都好 ...
linux下 url中文参数乱码问题 -
纳兰萝卜:
怎么我的编码 然后linux System.out.print ...
linux下 url中文参数乱码问题 -
geyaandy:
我也遇到了同样的问题,用你的方式解决了,但是还是不明白为什么
linux下 url中文参数乱码问题
同步代码依赖一种简单的可重入锁。虽然这种锁很容易使用,但是有许多局限。许多复杂的锁形式是由java.util.concurrent.locks包支持。我们不详细解释这个包,但是了关注它最重要最基本的接口,Lock。
Lock对象的工作机制与用同步代码的隐式锁很相似。作为隐式锁,只有一个线程能一次拥有一个锁对象。所对象也支持wait/notify机制。,通过它们关联的条件对象。
锁对象超过瘾式锁的最大优点是它们能撤回试图获取一个锁。tryLock方法会立即撤回如果发现锁是不可用的或者时间超时(如果有时间限制)。lockInterruptibly 方法撤回,如果另外一个线程发了一个中断在获取到锁之前。
让我们使用锁对象解决活性(Liveness)小节中的死锁问题。Alphonse和Gaston已经训练他们去通知,当一个朋友将鞠躬的时候。我们改进了模型,通过要求在互相鞠躬前我们的朋友对象必须获取参与者双方的锁。这里是改进模型的源码,Safelock。为了验证这种形式的功能,我们假设 Alphonse和Gaston这样迷恋安全鞠躬的能力,他们不可以停止相互鞠躬。
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.Random;
public class Safelock {
static class Friend {
private final String name;
private final Lock lock = new ReentrantLock();
public Friend(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public boolean impendingBow(Friend bower) {
Boolean myLock = false;
Boolean yourLock = false;
try {
myLock = lock.tryLock();
yourLock = bower.lock.tryLock();
} finally {
if (! (myLock && yourLock)) {
if (myLock) {
lock.unlock();
}
if (yourLock) {
bower.lock.unlock();
}
}
}
return myLock && yourLock;
}
public void bow(Friend bower) {
if (impendingBow(bower)) {
try {
System.out.format("%s: %s has"
+ " bowed to me!%n",
this.name, bower.getName());
bower.bowBack(this);
} finally {
lock.unlock();
bower.lock.unlock();
}
} else {
System.out.format("%s: %s started"
+ " to bow to me, but saw that"
+ " I was already bowing to"
+ " him.%n",
this.name, bower.getName());
}
}
public void bowBack(Friend bower) {
System.out.format("%s: %s has" +
" bowed back to me!%n",
this.name, bower.getName());
}
}
static class BowLoop implements Runnable {
private Friend bower;
private Friend bowee;
public BowLoop(Friend bower, Friend bowee) {
this.bower = bower;
this.bowee = bowee;
}
public void run() {
Random random = new Random();
for (;;) {
try {
Thread.sleep(random.nextInt(10));
} catch (InterruptedException e) {}
bowee.bow(bower);
}
}
}
public static void main(String[] args) {
final Friend alphonse =
new Friend("Alphonse");
final Friend gaston =
new Friend("Gaston");
new Thread(new BowLoop(alphonse, gaston)).start();
new Thread(new BowLoop(gaston, alphonse)).start();
}
}
这里后面添加这段源码的分析。
Lock对象的工作机制与用同步代码的隐式锁很相似。作为隐式锁,只有一个线程能一次拥有一个锁对象。所对象也支持wait/notify机制。,通过它们关联的条件对象。
锁对象超过瘾式锁的最大优点是它们能撤回试图获取一个锁。tryLock方法会立即撤回如果发现锁是不可用的或者时间超时(如果有时间限制)。lockInterruptibly 方法撤回,如果另外一个线程发了一个中断在获取到锁之前。
让我们使用锁对象解决活性(Liveness)小节中的死锁问题。Alphonse和Gaston已经训练他们去通知,当一个朋友将鞠躬的时候。我们改进了模型,通过要求在互相鞠躬前我们的朋友对象必须获取参与者双方的锁。这里是改进模型的源码,Safelock。为了验证这种形式的功能,我们假设 Alphonse和Gaston这样迷恋安全鞠躬的能力,他们不可以停止相互鞠躬。
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.Random;
public class Safelock {
static class Friend {
private final String name;
private final Lock lock = new ReentrantLock();
public Friend(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public boolean impendingBow(Friend bower) {
Boolean myLock = false;
Boolean yourLock = false;
try {
myLock = lock.tryLock();
yourLock = bower.lock.tryLock();
} finally {
if (! (myLock && yourLock)) {
if (myLock) {
lock.unlock();
}
if (yourLock) {
bower.lock.unlock();
}
}
}
return myLock && yourLock;
}
public void bow(Friend bower) {
if (impendingBow(bower)) {
try {
System.out.format("%s: %s has"
+ " bowed to me!%n",
this.name, bower.getName());
bower.bowBack(this);
} finally {
lock.unlock();
bower.lock.unlock();
}
} else {
System.out.format("%s: %s started"
+ " to bow to me, but saw that"
+ " I was already bowing to"
+ " him.%n",
this.name, bower.getName());
}
}
public void bowBack(Friend bower) {
System.out.format("%s: %s has" +
" bowed back to me!%n",
this.name, bower.getName());
}
}
static class BowLoop implements Runnable {
private Friend bower;
private Friend bowee;
public BowLoop(Friend bower, Friend bowee) {
this.bower = bower;
this.bowee = bowee;
}
public void run() {
Random random = new Random();
for (;;) {
try {
Thread.sleep(random.nextInt(10));
} catch (InterruptedException e) {}
bowee.bow(bower);
}
}
}
public static void main(String[] args) {
final Friend alphonse =
new Friend("Alphonse");
final Friend gaston =
new Friend("Gaston");
new Thread(new BowLoop(alphonse, gaston)).start();
new Thread(new BowLoop(gaston, alphonse)).start();
}
}
这里后面添加这段源码的分析。
发表评论
-
疑问和练习:并发
2014-06-08 13:48 0问题: 1 你能传一个线程对象给Executor.exec ... -
Concurrent Random Numbers 并发随机数
2014-06-08 01:37 0在jdk7中,Java.util.concurrent包括 ... -
Atomic Variables 原子变量
2014-06-08 01:26 918java.util.concurrent.atmoic包定义了 ... -
Concurrent Collections 并发集合
2014-06-08 00:58 642java.util.concurrent包 包含了大量J ... -
Fork/Join(分开/联合)
2014-06-08 00:59 795Fork/Join框架式ExecutorSe ... -
Thread Pools 线程池
2014-06-08 00:59 673大多数Executor的实现使用线程池,是由工作线程组成。 ... -
Executor Interfaces 执行器接口
2014-06-08 00:59 715java.util.Concurrent包定义了三类执行 ... -
Executors 执行器
2014-06-07 02:56 560在之前的所有例子中,在一个任务被一个新的线程(被定义为Ru ... -
High Level Concurrency Objects 高级并发对象
2014-06-07 02:21 605至今,课关注低级API,从最开始已经成为java平台的部分 ... -
Immutable Objects 不可变对象
2014-06-07 01:56 551如果一个对象在创建后它的状态不可变那这个对象被认为是不可变 ... -
Guarded Blocks 保护块
2014-06-07 00:53 614线程经常需要协调它们的活动,最常用的协调方法是保护块。这样 ... -
活性(Liveness)
2014-06-06 23:58 554并发应用程序及时执行的能力被叫做它的活性。这块描述了最普 ... -
原子访问(Atomic Access)
2014-06-06 22:24 1003在编程中,原子动作是一个突然有效地发生。一个原子动作在中 ... -
内在锁和同步
2014-06-06 21:52 535同步是建立在一个内部的实体上,被称作内在锁或者监视锁。(同步锁 ... -
如何判断方法是否需要同步
2014-03-27 11:01 0如何判断一个方法是否需要同步? 如果一个方法接受传参 根据传值 ... -
多线程中 静态方法与非静态方法class对象与instance区别
2014-03-27 10:35 590class对象 instance对象 两者在 ... -
java nio 开发笔记
2014-03-23 11:23 312java nio 原理 NIO有一个主要的类Selecto ...
相关推荐
在Oracle数据库管理中,"快速查找Oracle锁对象"是一个关键任务,特别是在处理并发事务和解决性能问题时。当多个用户或进程同时访问同一资源时,可能会出现锁冲突,导致某些事务等待,影响数据库的正常运行。了解如何...
例如,可以使用`V$SESSION`和`USER_LOCKS`视图来获取当前会话的锁定信息,或者使用`DBA_LOCKED_OBJECTS`来查看所有被锁定的对象及其状态。 3. **查詢那位使用者鎖住那個tables(詳細).sql**:这个文件可能包含了一个...
锁可以分为行级锁(Row Level Lock)和表级锁(Table Level Lock),以及更细粒度的锁类型。本文将深入探讨Oracle中的锁机制,特别是如何锁表与解锁,以及相关的SQL查询语句,帮助数据库管理员和开发人员更好地理解...
此查询提供了关于锁定表的信息,包括会话用户、锁的类型、对象所有者、对象名和类型、会话ID、序列号、终端、机器、程序和操作系统用户。 另一个查询方法是通过`v$locked_object`视图: ```sql SELECT p.spid, c....
此查询的结果包含了每个锁的详细信息,如用户名、锁的级别(表级或行级)、对象的所有者、对象名称、对象类型以及会话的相关信息等。 ##### 2.2 查找锁等待 当存在锁等待情况时,我们需要知道哪些会话锁定了表以及...
锁对象(Lock Object) 锁对象是一種机制,用于控制对某个数据的访问。ABAP 程序中可以使用锁对象来设锁,防止其他用户同时访问同一个数据。锁对象可以分為共享锁和独占锁两种。共享锁用于读取数据,独占锁用于修改...
- `LOCK_ID1`和`LOCK_ID2`: 锁的唯一标识符。 2. **锁模式解释**: - **None (0)**:没有锁。 - **Null (1)**:无效值。 - **Row-S(SS) (2)**:共享行锁。 - **Row-X(SX) (3)**:排他行锁。 - **Share (4)**...
此查询返回了所有正在进行锁操作的会话的信息,包括用户名、锁类型(表锁或行锁)、对象所有者、对象名、对象类型以及会话ID等相关信息。 ### 查询被锁定的对象 除了了解哪些会话正在执行锁操作外,还可能需要知道...
上述查询主要从`v$lock`视图中获取锁的信息,并通过连接`v$session`视图和`dba_objects`表来获取更多的上下文信息,比如会话ID、序列号和锁定的对象名称等。 #### 三、解锁方法 接下来,我们看看如何解锁。在...
这个查询会返回被锁定对象的所有者、对象名、回滚段号、槽号、序列号、锁定SESSION的ID、用户名、锁定类型(如行级锁、表级锁或共享锁)、用户组、机器名、系统用户名、进程ID、活动状态、服务器、SID、序列号、连接...
一、锁对象(Lock Object)和 Function Module * 锁对象是用于锁管理的重要工具,创建锁对象时,系统会自动生成两个 Function Module:ENQUEUE_<锁对象名> 和 DEQUEUE_<锁对象名>。 * ENQUEUE_<锁对象名> 用于在锁...
1. **分析锁状态**:首先,我们需要收集有关当前锁定情况的信息,包括哪些对象被锁定、哪个会话持有锁以及锁的类型等。这可以通过查询几个重要的视图来实现: - `v$locked_object`:显示当前被锁定的对象。 - `v$...
- **其他类型的锁**:如模式对象锁等。 **2. 锁模式:** - **Row-S(SS)**:共享模式下的行级锁。 - **Row-X(SX)**:排他模式下的行级锁。 - **Share**:共享锁。 - **S/Row-X(SSX)**:共享锁和排他行锁的组合。 - *...
**读写锁模式(Read-Write Lock Pattern):** 读写锁是一种特殊的锁,它允许多个读取者同时访问共享资源,但在任何时刻只允许一个写入者访问。这提高了程序的并发性,因为多个读取者可以同时进行读操作而不会互相...
- **锁定(Lock)**:锁定是在数据库对象上设置的一种机制,用于控制对数据的并发访问。 - **会话(Session)**:会话是用户与数据库之间的交互过程。每个登录到数据库的用户都会创建一个新的会话。 - **事务...
- `locked_mode`: 锁定模式,如1表示行共享锁(Row Share Lock),6表示排他锁(Exclusive Lock)等。 通过这个查询结果,我们可以快速定位哪些会话正在锁定特定的对象,并进一步分析这些锁定的原因及其影响范围。 ...
6. **`all_objects`表**:此数据字典视图包含了数据库中所有的对象信息,如所有者、对象类型和名称。结合`v$locked_object`,可以确定被锁定对象的实际名称。 7. **`v$session_wait`表**:这个视图显示了当前会话...
V$LOCK 视图提供了当前数据库中的锁信息,包括锁的类型、锁的模式、锁定的对象等信息。通过分析 V$LOCK 视图,可以快速地检测到数据库中的锁问题,避免锁问题对数据库的影响。 在给定的 SQL 语句中,使用了多个 ...
FROM v$locked_object a, dba_objects b WHERE b.object_id = a.object_id; ``` 这条语句能够帮助我们找出当前被锁定的对象(表),并显示锁定该对象的会话ID(`session_id`)以及锁定模式(`locked_mode`)。其中...