仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 671|回复: 9
打印 上一主题 下一主题

[学习教程] JAVA网页设计怎样了解Condition仓酷云

[复制链接]
活着的死人 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你对java乐观有点盲目。java的关键就是在服务器上表现优异,而且它提供了整个开发所需要的工具。应该是说,看哪天。net网页编程有没有机会赶上java。在java.util.concurrent包中,有两个很特别的工具类,Condition和ReentrantLock,利用过的人都晓得,ReentrantLock(重进锁)是jdk的concurrent包供应的一种独有锁的完成。它承继自DongLea的AbstractQueuedSynchronizer(同步器),切实的说是ReentrantLock的一个外部类承继了AbstractQueuedSynchronizer,ReentrantLock只不外是代办署理了该类的一些办法,大概有人会问为何要利用外部类在包装一层?我想是平安的干系,由于AbstractQueuedSynchronizer中有良多办法,还完成了共享锁,Condition(稍候再细说)等功效,假如间接使ReentrantLock承继它,则很简单呈现AbstractQueuedSynchronizer中的API被无用的情形。
言回正传,明天,我们会商下Condition工具类的完成。
ReentrantLock和Condition的利用体例一般是如许的:

运转后,了局以下:

能够看到,
Condition的实行体例,是当在线程1中挪用await办法后,线程1将开释锁,而且将本人甜睡,守候叫醒,
线程2猎取到锁后,入手下手办事,终了后,挪用Condition的signal办法,叫醒线程1,线程1恢复实行。
以上申明Condition是一个多线程间和谐通讯的工具类,使得某个,大概某些线程一同守候某个前提(Condition),只要当该前提具有(signal大概signalAll办法被带挪用)时,这些守候线程才会被叫醒,从而从头争取锁。
那,它是怎样完成的呢?
起首仍是要分明,reentrantLock.newCondition()前往的是Condition的一个完成,该类在AbstractQueuedSynchronizer中被完成,叫做newCondition()

它能够会见AbstractQueuedSynchronizer中的办法和其他外部类(AbstractQueuedSynchronizer是个笼统类,至于他怎样能会见,这里有个很奇奥的点,前面我专门用demo申明)
如今,我们一同来看下Condition类的完成,仍是从下面的demo动手,
为了便利誊写,我将AbstractQueuedSynchronizer缩写为AQS
当await被挪用时,代码以下:
publicfinalvoidawait()throwsInterruptedException{
if(Thread.interrupted())
thrownewInterruptedException();
Nodenode=addConditionWaiter();//将以后线程包装下后,
//增加到Condition本人保护的一个链表中。
intsavedState=fullyRelease(node);//开释以后线程占据的锁,从demo中看到,
//挪用await前,以后线程是占据锁的
intinterruptMode=0;
while(!isOnSyncQueue(node)){//开释终了后,遍历AQS的行列,看以后节点是不是在行列中,
//不在申明它还没有合作锁的资历,以是持续将本人甜睡。
//直到它被到场到行列中,伶俐的你大概猜到了,
//没有错,在singal的时分到场不就能够了?
LockSupport.park(this);
if((interruptMode=checkInterruptWhileWaiting(node))!=0)
break;
}
//被叫醒后,从头入手下手正式合作锁,一样,假如合作不到仍是会将本人甜睡,守候叫醒从头入手下手合作。
if(acquireQueued(node,savedState)&&interruptMode!=THROW_IE)
interruptMode=REINTERRUPT;
if(node.nextWaiter!=null)
unlinkCancelledWaiters();
if(interruptMode!=0)
reportInterruptAfterWait(interruptMode);
}

回到下面的demo,锁被开释后,线程1入手下手甜睡,这个时分线程由于线程1甜睡时,会叫醒AQS行列中的头结点,所以是线程2会入手下手合作锁,并猎取到,守候3秒后,线程2会挪用signal办法,“收回”signal旌旗灯号,signal办法以下:
<p>publicfinalvoidsignal(){
if(!isHeldExclusively())
thrownewIllegalMonitorStateException();
<p>Nodefirst=firstWaiter;
若相依 该用户已被删除
沙发
发表于 2015-1-20 19:16:27 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
不帅 该用户已被删除
板凳
发表于 2015-1-25 12:54:09 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
若天明 该用户已被删除
地板
发表于 2015-2-2 22:07:07 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
透明 该用户已被删除
5#
发表于 2015-2-8 09:58:18 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
简单生活 该用户已被删除
6#
发表于 2015-2-10 13:25:40 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
飘灵儿 该用户已被删除
7#
发表于 2015-2-22 14:45:48 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
再见西城 该用户已被删除
8#
发表于 2015-3-7 00:38:15 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
变相怪杰 该用户已被删除
9#
发表于 2015-3-12 21:54:37 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
金色的骷髅 该用户已被删除
10#
发表于 2015-3-20 12:30:48 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 05:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表