http://lavasoft.blog.51cto.com/62575/27069
守护线程和用户线程
守护线程与普通线程的唯一区别是:当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出,调用System.exit则必定会退出)
所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧,不用管它。
join方法
join()方法-等待该线程终止,那么如果thread_n.join(),就是说等待当前线程(join()的调用者--thread_n)终止
notify notifyall
wait与notify一般是配套使用的,
一个线程在同步语句中调用Object.wait方法,使该对象或类的锁释放掉,等待CPU分配时间片给其它线程,当其它线程调用Ojbect.notify后,wait方法才会返回。
notify与notifyAll的唯一区别就在于线程调用Object.wait方法后,有几个线程在等待其它线程将对象或类的锁释放掉,注意其它线程没有调用notify或notifyAll之间,调用Object.wait的线程是不是获取锁的,它们的区别就在于是唤醒调用wait方法的线程还是所有等待锁被释放的线程。
1、这两个方法来自不同的类分别是Thread和Object
2、最主要是sleep方法没有释� ......
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用,
我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。
总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。
你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。
那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?
这就是Object.equals方法了。但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。
也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大降低效率。
于是,Java采用了哈希表的原理。哈希(Hash)实际上是个人名,由于他提出一哈希算法的概念,所以就以他的名字命名了。
哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。如果详细讲解哈希算法,那需要更多的文章篇幅,我在这里就不介绍了。
初学者可以这样理解,hashCode方法实际上返回的就是对象存储的物理地址(实际可能并不� ......
怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西:
首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 Platform Standard
Edition,我们经常说到的JDK,就主要指的这个,它是三者的基础,属于桌面级应用开发,这部分如果学得好很容易拓展J2EE和J2ME。
J2ME,The Micro Edition of the Java 2
Platform。主要用于嵌入式Java,如手机,PDA等等。J2EE,Java 2 Platform,Enterprise
Edition,就是所谓的企业级Java,适合企业的大型应用开发。
J2SE:
新手最初学习的时候先要从J2SE开始学起,所包含的内容主要分为:面向对象概念的理解、Java基本语法的学习,Java桌面图形界面应用程序的开发,
掌握常用的Java API等(关键是要学会怎样查阅)。
重点:Java基本语法(循环结构,数据类型,数组,运算符等)、Swing,awt,
事件机制、文件输入输出流处理等
难点:面向对象思想的理解(接口、类等)、线程、socket网络编程等
视频教程推荐:孙鑫的Java基
础视频教程、张孝祥的Java基础视频教程,讲的都很细� ......
JAVA学习路线图
在开始之前有必要再讨论一下J2ME,J2SE,J2EE这些概念。J2ME,The
Micro Edition of the Java 2 Platform。主要用于嵌入式Java,如手机,PDA等等。J2SE,Java 2
Platform,Standard Edition,我们通常所说的JDK(Java Development
Kit)包含在此,是J2EE的基础。J2EE,Java 2 Platform,Enterprise
Edition,就是所谓的企业级Java。这些只是从API级别上的划分,实际上Sun给J2EE的定义是:开发基于组件的多层的企业级应用的规范。也
就是为各种不同的技术定义一个Java的规范,使这些不同的技术结合起来,在Java平台上构建强壮的企业级应用。从这一点来看,J2EE这个概念应该是
涵盖J2ME,J2SE的。比如一个典型的J2EE应用,网上商店,它支持web方式下订单,也支持手机下订单。显然必须用到J2SE,J2ME。所以也
就不存在所谓的从J2SE转向J2EE的问题了,只是后者包含的范围更广而已。
来看看Sun给出的J2EE 相关技术主要分为几大块。
1. Web Service技术
- Java API for XML Processing (JAXP)
- Java API for XML Registries (JAXR)
- Java API for XML-based RPC (JAX-RPC)
- & ......
TIOBE
的
编程语言排名榜,想必大家都非常熟悉,每月发布全球编程语言的热度和趋势。在四月份发布的数据中,C语言终于超过Java成为No.1,但真正让人担忧
的,并不是C的夺冠,而是Java的持续疲弱,更糟糕的是,似乎没有哪个老大站出来挽救颓势。
作为一名Java从业者,我在企业应用领域做软件,从工作中并未感受到Java的地位有什么太大的变化,J2EE依然是企业 B/S
应用架构的首选,但如果拿Java去做互联网应用,同样是WEB,但目前来看还有不少问题,不是不能做,是很尴尬。
最近在寻找合适的的wiki、blog类的开源程序,以前就知道大名鼎鼎的WordPress,Drupal,到官网上一看,全都是PHP的,而全
球最大的维基网站wikipedia也是基于PHP的。在我印象中,Java的开源社区也是非常活跃的,于是我就尝试搜索这些软件在Java中有没有对等
的项目,结果令人非常失望,不是没有,而是很弱,完全不在一个级别。
到目前为止:
我找到的Java方面的blog程序,最强的当属:Apache
Roller。但是,只有几套风格模板,找不到什么插件,没有扩展开发文档。而WordPress有成千上万的插件和风格模板,并且有庞大的用户群和活跃
的开发社区。
Java方面的Wiki程序,最强的应该是:XWiki ......
平时在工作的时候,总是觉得刚毕业的同事们对技术的理解不到位,知其然而不知其所以然。可是,静下心来想一想,这也不能全怪他们,不是新人们不爱
学,而是现如今Java Web开发的确很繁复。表面上看,现在会Java的人多如牛毛,SSH 恨不得是每个 java 开发培训课的必选项目,但
WEB 开发的门槛,真的不低。当然,我说不低,是要以一个专业性要求为前提的,如果只是精于“C&P”
大法,其实还不能算“掌握”,顶多是“会用”罢了,更别提精通了。
在实际的工作中,由于以前项目的积累,已经基本上不会从头建立工程了,通常都是拿现成的工程框架开始做,避免了很多配置啊,依赖啊之类的繁琐的工
作。但是今天又感受了一下,用了一天半的时间,从零开始,建立了一个 WEB 工程,所以才有这篇感慨文:Java Web 开发真的不容易。
那么,建立一个比较完整的WEB工程,并且跑起来(完成从前台到数据库的完整处理流程,哪怕只是插入一个整数),需要一个什么样的知识集合呢?
1、首先是环境准备。
通常,我们需要开发工具:Eclipse,或者MyEclipse。但我从来没有用过,我选Eclipse
。
然后,选择WEB容器,最常用的Tomcat,或者Jetty,JBoss ......