java软件编程培训

时间:2019-05-13 19:39:45下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《java软件编程培训》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《java软件编程培训》。

第一篇:java软件编程培训

最好的Java软件编程培训

西安雁塔尚学堂计算机学校创办于2009年,是陕西省培养计算机实用性人才的学校,学校以“程序运行人生,快乐魔力学堂”的口号名扬陕西,并且开创了V教学法等软件人才培养的模式先河。学校采用“理论+实践”并行的教学方式,使学生在这两者的结合中掌握一技之长,为社会培养和输送了大量的高级软件人才。

学校坐落于西安软件园交大捷普大厦,环境优美,更与国内外知名软件企业毗邻,人文气息浓厚。学校拥有自己的网站和机房供学生进行软件开发、设计等课程的实践。同时学校也是西安工业大学计算机与工程学院、陕西国际商贸学院、西安财经学院统计学院、陕西科技大学理学院、杨陵职业技术学 院等大学的实习就业项训基地。

开设课程软件编程培训,android高级课程,iphone高级课程

招生对象

1.iPhone培训课程面向希望把握历史性机遇,希望成为iPhone手机软件开发的紧缺人才。

2.计算机相关专业、大专以及以上学历。

3.本课程同样适用于希望了解iPhone手机软件开发,为未来业务转型奠定基础的企业技术团队。

免费复训 + 企业进阶课程 + 终身辅导

我们为学员专门开设QQ群、技术博客、微博等,学员到企业之后,如在技术和职业方向遇到任何瓶颈,都可以向导师请教。我们保持对行业和技术的高度敏感,不断优化和丰富课程内容,这些新技术毕业学员都可以免费学习,同时定期举办的技术讲座和活动,也是对学员免费开放的。

第二篇:JAVA编程心得体会

JAVA编程心得

计算机3班

窦金霞

20104773

最近几周一直在弄程序,说实话真的很累,但累中也有成功的快乐。我觉得学到了很多东西,这是只看课本知识所不能学到的。

说实话,以前我一直没学过JAVA虽然我也知道JAVA的重要性,可是即使上课听了,不实践还是掌握不了。因为种种原因,今年我没有买笔记本。没有机器,仅仅靠每周一次的上机练习是绝对不够的。所以我就插空调程序,在舍友们不用的时候自己再接她们的电脑调。

调上一个WEB版的通讯录程序时我已经感觉到学的很吃力,好多东西都不懂。这次做的这个学生成绩管理系统更复杂了,所以一开始调的时候感觉特别吃力.所以我告诉自己不能放弃,慢慢来,就这样我从最基本的sql语句session对象开始学起,我觉得我还有太多不懂得所以要比别人付出更多的努力。就这样我一点一点的学着„„

说心里话,在做上一个web版的通讯录时,我就感觉到成功的喜悦。好多地方我都是一点一点的问的,在问的过程中,我也学会了很多,像:Servlet和jsp之间跳不过去时有两种解决办法,一是关闭底层类中的db.close;二是将Servlet中的throws Exception改成try catch以捕捉异常;我还学到了集中查找错误的方法,可以加上两个双斜杠“//”将具体的方法屏蔽掉,一检查是方法错误还是Servlet错误,还有就是写上System.out.println()将获得的数据输出,用来检查数据传输过程有没有错误等等。

虽然在别人看来,这些方法可能都很常规,但是确实我自己学会的,我觉得很有成就感。我已经做好计划了,暑假的时候去买本本用自己的本本练习一下JAVA,虽然下学期不学JAVA了,但是我对JAVA的热情不会因为这个而削减的!

做完这个学生成绩管理系统后,我觉得我对JAVA的看法已经改变了。一前总以为JAVA很繁琐很难,听同学说JAVA不好学,开始又有一些听不懂,所以一直很畏惧JAVA。但真正做了这个系统以后我才感觉到其实任何事都没有难与不难之分,只要你肯努力的去做,世上无难事只怕有心人!

我现在对java学习充满了热情,我知道我还有很多的不足

还有很多需要努力的地方,所以我的JAVA之旅将继续进行„„

第三篇:java软件培训实习报告.

实习报告

一、实习时间 2013.01.08--2013.05.18

二、实习地点

无锡 NIIT 软件服务外包实训基地

三、实习目的

进一步了解 Java 开发的相关知识, 掌握 Java 开发的基本技术, 丰富 Java 开发的实战经 验。学习SQL 的基础知识及正确的运用方法, ssh 等企业应用框架和有用的相关技术, 提高 自己的工作效率。通过实习,培养我们综合运用已学知识 Java 语言的面向对象编程能力;培养我们动手能力;培养我们良好编程规范、编程方法;以便能较全面地理解、掌握和综合 运用所学的知识, 提高自身的编程能力;增强自己的团队协作意识, 了解软件开发的思考角 度和主要流程。为毕业之后能够更快地进入工作状态并且能够更好的工作, 打好一定的基础。

四、实习内容概要

应用 java 基础、MySQL 数据库、Servlet 技术、JSP 页面设计、JQuery、ajax、hibernate、struts2、spring、xml 等技术完成网站后台的开发。

五、实习内容 5.1 java基础知识

Java 的基础知识对于一个 java 软件工程师来说就好比是人的灵魂,现在的公司 在招聘的时候不在乎你会不会流行的技术,如(Struts、Hibernate、Spring、ibatis 等 他看重的 是你的基础扎不扎实, 对于网易、腾讯等大公司来说更是如此, 我们在开发过程中运用了大 量的 java 基础知识,如类、对象、方法、成员变量、静

态变量、封装、继承、多态、异常、接口、抽象类、IO 流„等等等等,所以一个系统对于 java 编程基础的依赖便不言而喻。

5.2MySQL、Oracle 数据库的介绍

MySQL 是最流行的开放源码 SQL 数据库管理系统,它是由 MySQL AB公司开发、发 布并支持的。MySQL AB是由多名 MySQL 开发人创办的一家商业公司。它是一家第二代开 放源码公司, 结合了开放源码价值取向、方法和成功的商业模型。Oracle 则是以稳定性著称, 在访问量和数据大量交换的服务器中, Oracle 占了大臂的江山, 在开发中主要用到了数据库 的查询语句、数据库的关系、事物等

5.3 Java中的常用设计模式 5.3.1 工厂模式

客户类和工厂类分开。消费者任何时候需要某种产品, 只需向工厂请求即可。消费者无 须修改就可以接纳新产品。缺点是当产品修改时, 工厂类也要做相应的修改。如:如何创建 及如何向客户端提供。

5.3.2 单例模式

单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例, 而且自行实 例化并向整个系统提供这个实例。这个类称为单例类。

5.4 Servlet & JSP技术的介绍 5.4.1 什么是 Servlet 一个 servlet 就是 Java 编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻 留着可以通过“请求-响应”编程模型来访问的应用程序。虽然 servlet 可以对任何类型的请 求产生响应,但通常只用来扩展 Web 服务器的应用程序。Java Servlet技术为这些应用程序 定义了一个特定于 HTTP 的 servlet类。

javax.servlet 和 javax.servlet.http 包为编写 servlet 提供了接口和类。所有的 servlet 都必 须实现 Servlet 接口,该接口定义了生命周期方法。

5.4.2 Servlet的生命周期

一个 servlet 的生命周期由部署 servlet 的容器来控制。当一个请求映射到一个 servlet 时, 该容器执行下列步骤。

5.4.3 JSP介绍

JSP 是由 Sun Microsystems公司倡导、许多公司参与一起建立的一种动态技术标准。在 传统的网页 HTML 文件(*.htm, *.html中加入 Java 程序 片段(Scriptlet 和 JSP 标签, 就构成了 JSP 网页 java 程序片段可以操纵数据库、重新定向网页以及发送 E-mail 等,实现 建立动态网站所 需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅 是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持 Java , 也 可以访问 JSP 网页。

5.4.4 JSP & Servlet Java Servlet是 JSP 技术的基础, 而且大型的 Web 应用程序的开发需要 Java Servlet和 JSP 配合才能完成。现在许多 Web 服务器都支持 Servlet , 即使不直接支持 Servlet 的 Web 服务器, 也可以通过附件的应用服务器和模块来支持 Servlet ,这得益于 Java 的跨平台特性。另外, 由于 Servlet 内部以线程方式提供提供服务,不必对于每个请求都启动一个进程,并且利用 多线程机制可以同时为多个请求服务,因此 Servlet 的效率非常高。

5.5 MVC 模式

为了把表现层 presentation 从请求处理 request processing 和数据存储 data storage中分离 开来, SUN 公司推荐在 JSP 文件中使用一种“模型-视图-控制器” Model-view-controller 模 式。规范的 SERVLET 或者分离的 JSP 文件用于处理请求。当请求处理完后,控制权交给一

个只作为创建输出作用的 JSP 页。有几种平台都基于服务于网络层的模-视图-控件 模式(比 如 Struts 和 Spring framework。

5.6 xml & jquery & ajax 5.6.1 xml Xml 是用于标记电子文件使其具有结构性的标记语言,可以用来标记 数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。主要学习了 xml 的语法与读取 xml。

5.6.2 jquery query 是继 prototype 之后又一个优秀的 Javascript 框架, jQuery 使用户能更方便地处理 HTML documents、events、实现动画效果, jQuery 还有一个比较大的优势是,它的文档说明 很全, 而且各种应用也说得很详细, 同时还有许多成熟的插件可供选择。jQuery 能够使用户 的 html 页保持代码和 html 内容分离,也就是说,不用再在 html 里面插入一堆 js 来调用命 令了,只需定义 id 即可。

5.6.3 ajax Ajax 的核心是 JavaScript 对象 XmlHttpRequest。该对象在 Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之, XmlHttpRequest 使您可 以使用 JavaScript 向服务器提出请求并处理响应,而不阻塞用户, AJAX 不是一种新的编程 语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。

5.7三大框架 5.7.1 Struts2 Struts 2是 Struts 的下一代产品,是在 struts 1和 WebWork 的技术基础上进行了

合并的全新的 Struts 2框架。其全新的 Struts 2的体系结构与 Struts 1的体系结构差别巨大。Struts 2以 WebWork 为核心, 采用拦截器的机制来处理用户的请求, 这样的设计也使得业务 逻辑控制器能够与 Servlet API完全脱离开, 所以 Struts 2可以理解为 WebWork 的更新产品。虽然从 Struts 1到 Struts 2有着太大的变化,但是相对于 WebWork , Struts 2的变化很小。

5.7.2 Hibernate Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量 级的对象封装, 使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用 JDBC 的场合, 既可以在 Java 的客户端程序使用, 也可以在 Servlet/JSP的 Web 应用中使用, 最具革命意义的是, Hibernate 可以在应用 EJB 的 J2EE 架构中取代 CMP , 完成数据持久化的重任。

5.7.3 Spring spring 在英文里有春天、弹簧、跳跃和泉眼的意思。Spring 也表示是 一个开源框架,是为了解决企业应用程序开发复杂性由 Rod Johnson创建的。框架的主要优 势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序 开发提供集成的框架。Spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。

然而, Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言, 任何 Java 应用都可以从 Spring 中受益。

六、实习总结及体会

通过这次实习机会,我主要学习了以上这些 java 编程的技术,同时也明白了身处公司 中如何更好地与同事配合, 毕竟在软件开发中, 你不可能一个人干完一个系统, 大家都是通 过 svn 等团队管理工具互相配合完成编程任务。在实习之前, 我对软件开发的过程只有一个 模糊地印象, 以为只要把代码编写完之后就算基本上一个项目

开发完毕了。然而通过这次实习, 彻底颠覆了我的认知, 我当时的认知无疑是非常幼稚和可笑的, 完全的软件开发过程不 只只是编写代码, 在编写代码之前还有好多的事情要做, 比如文档的编写、对项目进行需求 分析、数据库设计等等。代码编写完成之后还要进行测试,以及人员的培训,这些都是必须 做,也是必不可少的项目,甚至比代码的编写还重要。

以前总是觉得自己干不好编程,没有足够的自信,但通过一系列知识的学习,还有人 际交往能力的提高,我渐渐地认识到如果个人想要在公司立足,除了要有扎实的知识基础, 还必须具备良好的交流沟通能力, 虽然现在我在公司基本没出现加班的情况, 但做这一行就 得做好心里准备,时刻准备战斗,对于我们现在这个阶段来说,实践就是提高的唯一捷径, 在这个关键的阶段中,你必须做到肯吃苦,不怕累,让知识和技能来充实你的生活,但你回 想这一刻的时候, 你并不在乎当初赚的工资是多少, 上班的时间是多久, 你只在乎的是你的 技能、经验、人际关系的提高,这样会给你带来一种成就感,对于即将毕业的大学生来说, 经验与经历是你以后发展的敲门砖, 即将面对社会的我们, 再也没有校园那一堵堵围墙能给 我们安全感并保护着我们, 我们需要面对社会, 同其他人竞争, 如果你现在还在纠结这份工 作很辛苦、工资很低,那你就错了, 你要纠结的是这份工作能不能学到东西,你的能力跟你 的报酬对不对等, 如果当你发现你的能力跟你的报酬严重不对等或是没东西学习的时候, 那 时你可以选择到别的地方发展。

现在的我没事也会去一些 java 的 QQ 群跟大家交流一番,在这里你能找到很多程序猿(程序员的网络叫法 , 大家一起讨论技术, 讨论问题, 探讨人生, 虽然很多时候都是在八卦, 但只有他们才能理解这个职业的艰辛,才能与你感同身受。我在开发期间也遇到很多问题, 但是我会试着到网络去找答案, 如果实在找不到我会试着问问我的上级, 或者跟一些朋友讨 论一下, 如果发现了这个问题的答案我会及时把它记录下来, 方便以后遇到问题可以随时翻 阅, 我相信好记性不如烂笔头这句话, 我也相信如果一个程序员写的代码没有错误那只能证 明他没写过代码, 虽然我比较懒, 但我现在有空的时候都会对着电脑敲代码, 我相信手感是 敲出来的,你看 10遍都不如你敲一遍来得印象深刻。

通过这次实习,我认识到了一个软件开发的完整的过程,为我今后进行实际的工作奠定了 坚实的基础。首先,进入公司,你就是一名职业人,不再是一名学生,你要具备一名职业人 应具备的素养, 不迟到不早退是必然的, 而且还要时刻严格要求自己, 公司的规定要严格遵 守。然后, 在技术上也有了很大的提高, 学习了很多公司自己的框架和工具,这都是一些前 辈的宝贵经验。而且所作的软件应用性更强。所以,在今后的学习中我会严于律己,认真学习有关软件编程的课,为以后的工作打好坚实的基础。

第四篇:软件编程学习心得

软件编程学习心得

随着计算机技术的发展和工作的需要,为了能够更好的维护公司生产管理系统;公司安排我们到北大青鸟APTECH进修。我们选择了时下最流行、发展速度较快的语言C#。C#学习共分三个阶段,目前我只学习了第一个阶段;现将我在北大青鸟学习第一阶段为期两个月的学习心得总结如下:

C#是一种新的面向对象的编程语言,专门用于.NET运行时。C#编译器只能生成受管制的代码,也可以使用.NET基类。C#语言自C/C++演变而来。但是,它具有简单、现代、完全面向对象和类型安全等诸多特性。下面就简单说说简单和现代其中两种特性。

1、简单

C#具有C++所没有的一个优势就是学习简单。该语言首要的目标就是简单。很多功能(还不如说是缺少了C++的一些功能)有助于C#全方位的简单。

在C#中,没有C++中流行的指针。默认地,您工作在受管理的代码中,在那里不允许如直接存取内存等不安全的操作。我想没有C++程序员可以声称,从没有使用指针访问过不属于他们的内存。

C#弃用其它操作符,名字空间、成员和引用仅使用单个操作符 “.”。现在一个程序员所需要理解的就是嵌套名字的注解了。

C#使用统一的类型系统。这种系统充许您把各种类型作为一个对象查看,它是一个原始类型还是一个full-blown 类。和其它编程语言相比,由于加框(boxing)和消框(unboxing)的机制,把简单类型当作对象处理并不能获得性能的改善。稍后将详细解释加框和消框,但基本上仅当需要时才使用对象访问简单类型这种技术。

2、现代

投入学习C#的努力是一笔大投资,因为C#是为编写NGWS 应用程序的主要语言而设计。很多用C++可以实现或者很费力实现的功能,在C#中不过是一部分基本的功能而已。根据应用程序的特殊需求,可以很容易地创建出新的一种数据类型。

指针不再是编程武器的一部分。运行时NGWS提供了一个垃圾收集器,负责C#程序中的内存管理。因内存和应用程序都受到管理,所以很必要增强类型安全,以确保应用的稳定性。

异常处理是C#的主要功能。C#的异常处理与C++的不同点在于它是交叉语言的(运行时的另一个功能)。在没有C#之前,您必须处理怪异的HRESULTs,但现在由于使用了基于异常的健壮的出错处理,这一切都结束了。

对于现代的应用程序,安全是首要的,C#也不会例外。它提供了元数据语法,用于声明下述NGWS安全模式的能力和许可。元数据是NGWS运行时的一个关键的概念。

通两个多月学习,我能够很好的掌握C#语言的基本语句、语法以及老师补充的一些要点;能够编写简单的应用程序,例如电子邮件的收发等,为接下来的第二、第三阶段学习打下了良好的基础。

第五篇:Java多线程编程总结

Java多线程编程总结

2007-05-17 11:21:59 标签:java 多线程

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处、作者信息和本声明。否则将追究法律责任。http://lavasoft.blog.51cto.com/62575/27069

Java多线程编程总结

下面是Java线程系列博文的一个编目:

Java线程:概念与原理 Java线程:创建与启动

Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-守护线程 Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块

Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池

Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上)Java线程:新特征-锁(下)Java线程:新特征-信号量 Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:大总结

----

下面的内容是很早之前写的,内容不够充实,而且是基于Java1.4的内容,Java5之后,线程并发部分扩展了相当多的内容,因此建议大家看上面的系列文章的内容,与时俱进,跟上Java发展的步伐。----

一、认识多任务、多进程、单线程、多线程 要认识多线程就要从操作系统的原理说起。

以前古老的DOS操作系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情。比如你在copy东西的时候不能rename文件名。为了提高系统的利用效率,采用批处理来批量执行任务。

现在的操作系统都是多任务操作系统,每个运行的任务就是操作系统所做的一件事情,比如你在听歌的同时还在用MSN和好友聊天。听歌和聊天就是两个任务,这个两个任务是“同时”进行的。一个任务一般对应一个进程,也可能包含好几个进程。比如运行的MSN就对应一个MSN的进程,如果你用的是windows系统,你就可以在任务管理器中看到操作系统正在运行的进程信息。

一般来说,当运行一个应用程序的时候,就启动了一个进程,当然有些会启动多个进程。启动进程的时候,操作系统会为进程分配资源,其中最主要的资源是内存空间,因为程序是在内存中运行的。在进程中,有些程序流程块是可以乱序执行的,并且这个代码块可以同时被多次执行。实际上,这样的代码块就是线程体。线程是进程中乱序执行的代码流程。当多个线程同时运行的时候,这样的执行模式成为并发执行。

多线程的目的是为了最大限度的利用CPU资源。

Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行。

一般常见的Java应用程序都是单线程的。比如,用java命令运行一个最简单的HelloWorld的Java应用程序时,就启动了一个JVM进程,JVM找到程序程序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称之为主线程。当main方法结束后,主线程运行完成。JVM进程也随即退出。

对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。

实际上,操作的系统的多进程实现了多任务并发执行,程序的多线程实现了进程的并发执行。多任务、多进程、多线程的前提都是要求操作系统提供多任务、多进程、多线程的支持。

在Java程序中,JVM负责线程的调度。线程调度是值按照特定的机制为多个线程分配CPU的使用权。调度的模式有两种:分时调度和抢占式调度。分时调度是所有线程轮流获得CPU使用权,并平均分配每个线程占用CPU的时间;抢占式调度是根据线程的优先级别来获取CPU的使用权。JVM的线程调度模式采用了抢占式模式。

所谓的“并发执行”、“同时”其实都不是真正意义上的“同时”。众所周知,CPU都有个时钟频率,表示每秒中能执行cpu指令的次数。在每个时钟周期内,CPU实际上只能去执行一条(也有可能多条)指令。操作系统将进程线程进行管理,轮流(没有固定的顺序)分配每个进程很短的一段是时间(不一定是均分),然后在每个线程内部,程序代码自己处理该进程内部线程的时间分配,多个线程之间相互的切换去执行,这个切换时间也是非常短的。因此多任务、多进程、多线程都是操作系统给人的一种宏观感受,从微观角度看,程序的运行是异步执行的。

用一句话做总结:虽然操作系统是多线程的,但CPU每一时刻只能做一件事,和人的大脑是一样的,呵呵。

二、Java与多线程

Java语言的多线程需要操作系统的支持。

Java 虚拟机允许应用程序并发地运行多个执行线程。Java语言提供了多线程编程的扩展点,并给出了功能强大的线程控制API。

在Java中,多线程的实现有两种方式: 扩展java.lang.Thread类 实现java.lang.Runnable接口

每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。

当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止:

调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。

非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。

三、扩展java.lang.Thread类

/** * File Name: TestMitiThread.java * Created by: IntelliJ IDEA.* Copyright: Copyright(c)2003-2006 * Company: Lavasoft([url]http://lavasoft.blog.51cto.com/[/url])* Author: leizhimin * Modifier: leizhimin * Date Time: 2007-5-17 10:03:12 * Readme: 通过扩展Thread类实现多线程 */ public class TestMitiThread { public static void main(String[] rags){ System.out.println(Thread.currentThread().getName()+ “ 线程运行开始!”);new MitiSay(“A”).start();new MitiSay(“B”).start();System.out.println(Thread.currentThread().getName()+ “ 线程运行结束!”);} }

class MitiSay extends Thread { public MitiSay(String threadName){ super(threadName);}

public void run(){ System.out.println(getName()+ “ 线程运行开始!”);for(int i = 0;i < 10;i++){ System.out.println(i + “ ” + getName());try { sleep((int)Math.random()* 10);} catch(InterruptedException e){ e.printStackTrace();} } System.out.println(getName()+ “ 线程运行结束!”);} }

运行结果:

main 线程运行开始!main 线程运行结束!A 线程运行开始!0 A 1 A B 线程运行开始!2 A 0 B 3 A 4 A 1 B 5 A 6 A 7 A 8 A 9 A A 线程运行结束!2 B 3 B 4 B 5 B 6 B 7 B 8 B 9 B B 线程运行结束!说明:

程序启动运行main时候,java虚拟机启动一个进程,主线程main在main()调用时候被创建。随着调用MitiSay的两个对象的start方法,另外两个线程也启动了,这样,整个应用就在多线程下运行。

在一个方法中调用Thread.currentThread().getName()方法,可以获取当前线程的名字。在mian方法中调用该方法,获取的是主线程的名字。

注意:start()方法的调用后并不是立即执行多线程代码,而是使得该线程变为可运行态(Runnable),什么时候运行是由操作系统决定的。

从程序运行的结果可以发现,多线程程序是乱序执行。因此,只有乱序执行的代码才有必要设计为多线程。

Thread.sleep()方法调用目的是不让当前线程独自霸占该进程所获取的CPU资源,以留出一定时间给其他线程执行的机会。

实际上所有的多线程代码执行顺序都是不确定的,每次执行的结果都是随机的。

四、实现java.lang.Runnable接口

/** * 通过实现 Runnable 接口实现多线程 */ public class TestMitiThread1 implements Runnable {

public static void main(String[] args){ System.out.println(Thread.currentThread().getName()+ “ 线程运行开始!”);TestMitiThread1 test = new TestMitiThread1();Thread thread1 = new Thread(test);Thread thread2 = new Thread(test);thread1.start();thread2.start();System.out.println(Thread.currentThread().getName()+ “ 线程运行结束!”);}

public void run(){ System.out.println(Thread.currentThread().getName()+ “ 线程运行开始!”);for(int i = 0;i < 10;i++){ System.out.println(i + “ ” + Thread.currentThread().getName());try { Thread.sleep((int)Math.random()* 10);} catch(InterruptedException e){ e.printStackTrace();} } System.out.println(Thread.currentThread().getName()+ “ 线程运行结束!”);} }

运行结果:

main 线程运行开始!Thread-0 线程运行开始!main 线程运行结束!0 Thread-0 Thread-1 线程运行开始!0 Thread-1 1 Thread-1 1 Thread-0 2 Thread-0 2 Thread-1 3 Thread-0 3 Thread-1 4 Thread-0 4 Thread-1 5 Thread-0 6 Thread-0 5 Thread-1 7 Thread-0 8 Thread-0 6 Thread-1 9 Thread-0 7 Thread-1 Thread-0 线程运行结束!8 Thread-1 9 Thread-1 Thread-1 线程运行结束!说明:

TestMitiThread1类通过实现Runnable接口,使得该类有了多线程类的特征。run()方法是多线程程序的一个约定。所有的多线程代码都在run方法里面。Thread类实际上也是实现了Runnable接口的类。

在启动的多线程的时候,需要先通过Thread类的构造方法Thread(Runnable target)构造出对象,然后调用Thread对象的start()方法来运行多线程代码。

实际上所有的多线程代码都是通过运行Thread的start()方法来运行的。因此,不管是扩展Thread类还是实现Runnable接口来实现多线程,最终还是通过Thread的对象的API来控制线程的,熟悉Thread类的API是进行多线程编程的基础。

五、读解Thread类API

static int MAX_PRIORITY 线程可以具有的最高优先级。static int MIN_PRIORITY 线程可以具有的最低优先级。static int NORM_PRIORITY 分配给线程的默认优先级。

构造方法摘要

Thread(Runnable target)分配新的 Thread 对象。Thread(String name)分配新的 Thread 对象。

方法摘要

static Thread currentThread()返回对当前正在执行的线程对象的引用。ClassLoader getContextClassLoader()返回该线程的上下文 ClassLoader。long getId()返回该线程的标识符。String getName()返回该线程的名称。int getPriority()返回线程的优先级。Thread.State getState()返回该线程的状态。ThreadGroup getThreadGroup()返回该线程所属的线程组。static boolean holdsLock(Object obj)当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。void interrupt()中断线程。

static boolean interrupted()测试当前线程是否已经中断。boolean isAlive()测试线程是否处于活动状态。boolean isDaemon()测试该线程是否为守护线程。boolean isInterrupted()测试线程是否已经中断。void join()等待该线程终止。void join(long millis)等待该线程终止的时间最长为 millis 毫秒。void join(long millis, int nanos)等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。void resume()已过时。该方法只与 suspend()一起使用,但 suspend()已经遭到反对,因为它具有死锁倾向。有关更多信息,请参阅为何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反对?。void run()如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。void setContextClassLoader(ClassLoader cl)设置该线程的上下文 ClassLoader。void setDaemon(boolean on)将该线程标记为守护线程或用户线程。

static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)设置当线程由于未捕获到异常而突然终止,并且没有为该线程定义其他处理程序时所调用的默认处理程序。void setName(String name)改变线程名称,使之与参数 name 相同。void setPriority(int newPriority)更改线程的优先级。

void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)设置该线程由于未捕获到异常而突然终止时调用的处理程序。static void sleep(long millis)在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。static void sleep(long millis, int nanos)在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行)。void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。void stop()已过时。该方法具有固有的不安全性。用 Thread.stop 来终止线程将释放它已经锁定的所有监视器(作为沿堆栈向上传播的未检查 ThreadDeath 异常的一个自然后果)。如果以前受这些监视器保护的任何对象都处于一种不一致的状态,则损坏的对象将对其他线程可见,这有可能导致任意的行为。stop 的许多使用都应由只修改某些变量以指示目标线程应该停止运行的代码来取代。目标线程应定期检查该变量,并且如果该变量指示它要停止运行,则从其运行方法依次返回。如果目标线程等待很长时间(例如基于一个条件变量),则应使用 interrupt 方法来中断该等待。有关更多信息,请参阅《为何不赞成使用 Thread.stop、Thread.suspend 和 Thread.resume?》。void stop(Throwable obj)已过时。该方法具有固有的不安全性。请参阅 stop()以获得详细信息。该方法的附加危险是它可用于生成目标线程未准备处理的异常(包括若没有该方法该线程不太可能抛出的已检查的异常)。有关更多信息,请参阅为何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反对?。void suspend()已过时。该方法已经遭到反对,因为它具有固有的死锁倾向。如果目标线程挂起时在保护关键系统资源的监视器上保持有锁,则在目标线程重新开始以前任何线程都不能访问该资源。如果重新开始目标线程的线程想在调用 resume 之前锁定该监视器,则会发生死锁。这类死锁通常会证明自己是“冻结”的进程。有关更多信息,请参阅为何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反对?。String toString()返回该线程的字符串表示形式,包括线程名称、优先级和线程组。static void yield()暂停当前正在执行的线程对象,并执行其他线程。

六、线程的状态转换图

线程在一定条件下,状态会发生变化。线程变化的状态转换图如下:

1、新建状态(New):新创建了一个线程对象。

2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。

4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

(一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。

(二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

(三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

5、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

七、线程的调度

1、调整线程优先级:Java线程有优先级,优先级高的线程会获得较多的运行机会。

Java线程的优先级用整数表示,取值范围是1~10,Thread类有以下三个静态常量: static int MAX_PRIORITY 线程可以具有的最高优先级,取值为10。static int MIN_PRIORITY 线程可以具有的最低优先级,取值为1。static int NORM_PRIORITY 分配给线程的默认优先级,取值为5。

Thread类的setPriority()和getPriority()方法分别用来设置和获取线程的优先级。

每个线程都有默认的优先级。主线程的默认优先级为Thread.NORM_PRIORITY。

线程的优先级有继承关系,比如A线程中创建了B线程,那么B将和A具有相同的优先级。JVM提供了10个线程优先级,但与常见的操作系统都不能很好的映射。如果希望程序能移植到各个操作系统中,应该仅仅使用Thread类有以下三个静态常量作为优先级,这样能保证同样的优先级采用了同样的调度方式。

2、线程睡眠:Thread.sleep(long millis)方法,使线程转到阻塞状态。millis参数设定睡眠的时间,以毫秒为单位。当睡眠结束后,就转为就绪(Runnable)状态。sleep()平台移植性好。

3、线程等待:Object类中的wait()方法,导致当前的线程等待,直到其他线程调用此对象的 notify()方法或 notifyAll()唤醒方法。这个两个唤醒方法也是Object类中的方法,行为等价于调用 wait(0)一样。

4、线程让步:Thread.yield()方法,暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程。

5、线程加入:join()方法,等待其他线程终止。在当前线程中调用另一个线程的join()方法,则当前线程转入阻塞状态,直到另一个进程运行结束,当前线程再由阻塞转为就绪状态。

6、线程唤醒:Object类中的notify()方法,唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个 wait 方法,在对象的监视器上等待。直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争;例如,唤醒的线程在作为锁定此对象的下一个线程方面没有可靠的特权或劣势。类似的方法还有一个notifyAll(),唤醒在此对象监视器上等待的所有线程。注意:Thread中suspend()和resume()两个方法在JDK1.5中已经废除,不再介绍。因为有死锁倾向。

7、常见线程名词解释

主线程:JVM调用程序mian()所产生的线程。

当前线程:这个是容易混淆的概念。一般指通过Thread.currentThread()来获取的进程。后台线程:指为其他线程提供服务的线程,也称为守护线程。JVM的垃圾回收线程就是一个后台线程。

前台线程:是指接受后台线程服务的线程,其实前台后台线程是联系在一起,就像傀儡和幕后操纵者一样的关系。傀儡是前台线程、幕后操纵者是后台线程。由前台线程创建的线程默认也是前台线程。可以通过isDaemon()和setDaemon()方法来判断和设置一个线程是否为后台线程。

本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/27069

下载java软件编程培训word格式文档
下载java软件编程培训.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    Java基础编程题

    【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析: 兔子的......

    Java编程语言面试题

    西安英泰移动通信学院S2级Java编程语言测试题 1 Java编程语言面试题 一、简答题 1、 简述用Java编程语言编写、编译、解释和执行过程。 2、 简述在Java JDK中,java.exe程序的......

    java高级编程教学大纲

    《Java高级编程》教学大纲 郑州大学软件技术学院 一、 课程的性质与任务 本课程是软件开发专业开设的程序设计类高级课程,学生在学习了《程序设计导论》,初步具备了一定的程......

    Java AWT编程总结

    1. 什么是GUI? a) GUI是Graphics User Interface的全称,意思是图形用户界面. 2. 为什么需要GUI? a) 图形用户界面能够让最终用户通过鼠标拖动、单击等动作就可以操作整个应......

    Java线程编程总结

    线程编程方面60、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runnable接......

    Java AWT编程总结

    1. 什么是GUI? a) GUI是Graphics User Interface的全称,意思是图形用户界面. 2. 为什么需要GUI? a) 图形用户界面能够让最终用户通过鼠标拖动、单击等动作就可以操作整个应......

    Java JDBC编程总结

    Java JDBC编程总结 Hibernate、TopLink等OR Mapping操作数据库的技术都是建立JDBC技术之上的,实际来说,他们的性能和JDBC是有很大差距的,但反过来说,如果JDBC用不好,还不如hibern......

    java编程实习心得体会

    Java编程实习心得体会 “纸上得来终觉浅,绝知此事要躬行。”在短暂的实习过程中,我深深的感觉到自己所学知识的肤浅和在实际运用中的专业知识的匮乏。刚开始的一段时间里,对一......