仓酷云

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

[学习教程] 了解下JAVA的Java多线程:“基本篇”09之interrupt()和线程停止体例

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:00:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,netbeans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。
1.interrupt()申明
在先容停止线程的体例之前,有需要先对interrupt()举行懂得。
关于interrupt(),java的djk文档形貌以下:
http://docs.oracle.com/javase/7/docs/api/
Interruptsthisthread.
Unlessthecurrentthreadisinterruptingitself,whichisalwayspermitted,thecheckAccessmethodofthisthreadisinvoked,whichmaycauseaSecurityExceptiontobethrown.
Ifthisthreadisblockedinaninvocationofthewait(),wait(long),orwait(long,int)methodsoftheObjectclass,orofthejoin(),join(long),join(long,int),sleep(long),orsleep(long,int),methodsofthisclass,thenitsinterruptstatuswillbeclearedanditwillreceiveanInterruptedException.
IfthisthreadisblockedinanI/Ooperationuponaninterruptiblechannelthenthechannelwillbeclosed,thethreadsinterruptstatuswillbeset,andthethreadwillreceiveaClosedByInterruptException.
IfthisthreadisblockedinaSelectorthenthethreadsinterruptstatuswillbesetanditwillreturnimmediatelyfromtheselectionoperation,possiblywithanon-zerovalue,justasiftheselectorswakeupmethodwereinvoked.
Ifnoneofthepreviousconditionsholdthenthisthreadsinterruptstatuswillbeset.
Interruptingathreadthatisnotaliveneednothaveanyeffect.
大抵意义是:
interrupt()的感化是中止本线程。
本线程中止本人是被同意的;别的线程挪用本线程的interrupt()办法时,会经由过程checkAccess()反省权限。这有大概抛出SecurityException非常。
假如本线程是处于堵塞形态:挪用线程的wait(),wait(long)或wait(long,int)会让它进进守候(阻塞)形态,大概挪用线程的join(),join(long),join(long,int),sleep(long),sleep(long,int)也会让它进进堵塞形态。若线程在堵塞形态时,挪用了它的interrupt()办法,那末它的“中止形态”会被扫除而且会收到一个InterruptedException非常。比方,线程经由过程wait()进进堵塞形态,此时经由过程interrupt()中止该线程;挪用interrupt()会当即将线程的中止标志设为“true”,但是因为线程处于堵塞形态,以是该“中止标志”会当即被扫除为“false”,同时,会发生一个InterruptedException的非常。
假如线程被堵塞在一个Selector选择器中,那末经由过程interrupt()中止它时;线程的中止标志会被设置为true,而且它会当即从选择操纵中前往。
假如不属于后面所说的情形,那末经由过程interrupt()中止线程时,它的中止标志会被设置为“true”。
中止一个“已停止的线程”不会发生任何操纵。
2.停止线程的体例
Thread中的stop()和suspend()办法,因为固有的不平安性,已倡议不再利用!
上面,我先分离会商线程在“堵塞形态”和“运转形态”的停止体例,然后再总结出一个通用的体例。
2.1停止处于“堵塞形态”的线程
一般,我们经由过程“中止”体例停止处于“堵塞形态”的线程。
当线程因为被挪用了sleep(),wait(),join()等办法而进进堵塞形态;若此时挪用线程的interrupt()将线程的中止标志设为true。因为处于堵塞形态,中止标志会被扫除,同时发生一个InterruptedException非常。将InterruptedException放在得当的为止就可以停止线程,情势以下:
  1. @Override
  2. publicvoidrun(){
  3. try{
  4. while(true){
  5. //实行义务...
  6. }
  7. }catch(InterruptedExceptionie){
  8. //因为发生InterruptedException非常,加入while(true)轮回,线程停止!
  9. }
  10. }
复制代码
申明:在while(true)中不休的实行义务,当线程处于堵塞形态时,挪用线程的interrupt()发生InterruptedException中止。中止的捕捉在while(true)以外,如许就加入了while(true)轮回!
注重:对InterruptedException的捕捉务一样平常放在while(true)轮回体的表面,如许,在发生非常时就加入了while(true)轮回。不然,InterruptedException在while(true)轮回体以内,就必要分外的增加退出处置。情势以下:
  1. @Override
  2. publicvoidrun(){
  3. while(true){
  4. try{
  5. //实行义务...
  6. }catch(InterruptedExceptionie){
  7. //InterruptedException在while(true)轮回体内。
  8. //当线程发生了InterruptedException非常时,while(true)仍能持续运转!必要手动加入
  9. break;
  10. }
  11. }
  12. }
复制代码
申明:下面的InterruptedException非常的捕捉在whle(true)以内。当发生InterruptedException异常时,被catch处置以外,仍旧在while(true)轮回体内;要加入while(true)轮回体,必要分外的实行退出while(true)的操纵。
<p>
从一个编程语言的普及程度来将,一个好的IDE是至关中要的,而现在的java的IDE虽然已经很好了,但是和.net比起来还是稍微差一些的,这是个客观事实。java要想普及的更好。DE是必须加以改进的。
柔情似水 该用户已被删除
10#
发表于 2015-3-19 18:34:24 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
第二个灵魂 该用户已被删除
9#
发表于 2015-3-12 06:59:28 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-5 12:25:42 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
金色的骷髅 该用户已被删除
7#
发表于 2015-2-16 23:57:55 | 只看该作者
是一种为 Internet发展的计算机语言
飘飘悠悠 该用户已被删除
6#
发表于 2015-2-6 16:01:23 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
只想知道 该用户已被删除
5#
发表于 2015-1-30 21:15:50 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
精灵巫婆 该用户已被删除
地板
发表于 2015-1-26 21:40:01 来自手机 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
再现理想 该用户已被删除
板凳
发表于 2015-1-20 12:40:29 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
简单生活 该用户已被删除
沙发
发表于 2015-1-20 12:40:29 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-15 11:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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