a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 161|回复: 0

[基础知识] JAVA基础:从三方面深入剖析Java编程语言

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
Java编程说话需要我们进行相关常识的进修,不少人城市说我们要注重相关问题的介绍。下面我们就年夜三方面来看看若何进行Java编程说话的熟悉和进修。但愿巨匠有所收成。& \. d( c" q, |+ @  W
  我对历程、线程的体味,主若是学生时代看过的一本概略叫做“C++面象对象多线程编程”的书,是美国人写的。后来学Java编程说话,一向是马轻率虎,以完成使命为方针,没有像学C++那样打实基本(C++的基本也忘差不多了,汗)。这不做工具时又碰着麻烦,经由排查解决,有几个简单常识点做一下标识表记标帜。" }0 i# x8 t8 Z+ R
  第一个是run()与start()。翻翻以前自己写的代码,是用start()启动线程的,此次居然犯糊涂用run()来跑,犯警错才怪呢。相信有不少Java编程说话轨范员像我一样,在不懂的时辰,就按个点,查看体例列表,跟据体例名想当然地舆解。这种体例可以快速入手做工具,但像多线程这类的工具,仍是需要打牢基本,否则麻烦多多。
* Y7 r) {$ X3 C; Z9 O  run()只是一个通俗体例,是Runnable接口界说的,用来执行线程最终要做的工作的体例,它自己没有出格之处,就像main体例一样,启动一个线程后,run()体例会被挪用。所以,run()体例没有建树多线程,run()体例里的工具还在挪用者线程里跑。0 _4 K5 C! B% d! W$ ?( @
  start()体例是Thread类界说的,它是真正负责启动一个线程的。挪用此体例后,将会年夜线程建树一个新的线程出来(强调年夜当前方程建树新线程是因为一些属性好比daemon会被担任),然后在新线程执行run()体例。
9 z: D: Q# D2 w7 a  第二个就是InterruptedException。典型地,我们在run()体例中常用while轮回,而且每次轮回凡是有Thread.sleep(long)挪用,这个sleep(long)体例会抛出InterruptedException。之前对这个异常的理解有误,觉得这是个“错误”,其拭魅这只是暗示一个状况。看官方文档有点拗口,简单地说,这个异常被抛出暗示线程收到间断请求(你也可以理解为线程正在被终止,凡是是这样,但一直对。为了线程平安、保证数据的一致性,Java编程说话倡导用温顺手断中止线程,温顺的意思就是run()体例里的代码有机缘抉择什么时辰退出),好比外部挪用interrupt()来间断此线程。sleep()收到间断异平平易近味着sleep时外部发来了间断请求旌旗灯号,这时如不美观没有需要善后的操作,就可以退出while轮回,竣事线程了。我以前的代码是catch失踪打一句日志,虽然正常工作了,可是却是错误的。再汗一把!6 S' ]# x3 T- k9 g  J
  第三个是Thread.interrupted()和thread.isInterrupted()的区别(后者thread代表Thread的一个实例)。两者都返回线程的捣炙荡态,区别在于前者返回捣炙荡态后,会复会这个状况。好比Thread.interrupted()得了true,但此后线程状况被当即置为了false。如不美观不想改蹦这一状况,可以用isInterrupted(),好比Thread.currentThread.isInterrupted()。还有就是间断状况是会被一些操作改变的,所以不能只用此状况来断段线程是否要退出。线程应该此外设置一个退出标识表记标帜(如不美观需要节制线程的运行与否的话)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-15 11:22 , Processed in 0.410249 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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