Board logo

标题: Java编程语言从三方面的深入剖析 [打印本页]

作者: qingqing3721    时间: 2011-6-6 05:53     标题: Java编程语言从三方面的深入剖析

Java编程语言需要我们停止相关知识的学习, 不少人都会说我们要注意相关成绩的介绍。 下面我们就从三方面来看看如何停止Java编程语言的看法和学习。 希望大家有所收获。  
  我对进程、线程的理解, 主要是学生时代看过的一本大概叫做“C++面象对象多线程编程”的书, 是美国人写的。 后来学Java编程语言, 不时是马马虎虎, 以完成任务为目的, 没有像学C++那样打实根底(C++的根底也忘差不多了, 汗)。 这不做东西时又碰到麻烦, 经过排查解决, 有几个复杂知识点做一下笔记。
  第一个是run()与start()。 翻翻以前本人写的代码, 是用start()启动线程的, 这次居然犯懵懂用run()来跑, 不出错才怪呢。 相信有不少Java编程语言顺序员像我一样, 在不懂的时候, 就按个点, 查看方法列表, 跟据方法名想当然天文解。 这种方法可以快速入手做东西, 但像多线程这类的东西, 还是需要打牢根底, 不然麻烦多多。
  run()只是一个普通方法, 是Runnable接口定义的, 用来执行线程最终要做的事情的方法, 它本身没有特别之处, 就像main方法一样, 启动一个线程后, run()方法会被调用。 所以, run()方法没有创立多线程, run()方法里的东西还在调用者线程里跑。
  start()方法是Thread类定义的, 它是真正担任启动一个线程的。 调用此方法后, 将会从线程创立一个新的线程出来(强调从当前线程创立新线程是因为一些属性比如daemon会被继承), 然后在新线程执行run()方法。
  第二个就是InterruptedException。 典型地, 我们在run()方法中常用while循环, 并且每次循环通常有Thread. sleep(long)调用, 这个sleep(long)方法会抛出InterruptedException。 之前对这个异常的理解有误, 以为这是个“错误”, 其实这只是表示一个形态。 看官方文档有点拗口, 复杂地说, 这个异常被抛出表示线程收到中缀央求(你也可以理解为线程正在被终止, 通常是这样, 但不绝对。 为了线程平安、保证数据的分歧性, Java编程语言提倡用温和手断中止线程, 温和的意思就是run()方法里的代码无机会决定什么时候参与), 比如外部调用interrupt()来中缀此线程。 sleep()收到中缀异常意味着sleep时外部发来了中缀央求信号, 这时假设没有需要善后的操作, 就可以参与while循环, 结束线程了。 我以前的代码是catch掉打一句日志, 虽然正常任务了, 但是却是错误的。 再汗一把!
  第三个是Thread. interrupted()和thread. isInterrupted()的区别(后者thread代表Thread的一个实例)。 两者都返回线程的当前形态, 区别在于前者返回当前形态后, 会复会这个形态。 比如Thread. interrupted()得了true, 但此后线程形态被立刻置为了false。 假设不想改变这一形态, 可以用isInterrupted(), 比如Thread. currentThread. isInterrupted()。 还有就是中缀形态是会被一些操作改变的, 所以不能只用此形态来断段线程是否要参与。线程应该另外设置一个参与标记(假设需要控制线程的运转与否的话)。文章由红酒木瓜汤有用吗整理,收集辛苦,希望能保留出处。




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0