基于Spring+SpringMVC+WebSocket开发的聊天室项目

最近在研究 WebSocket ,写了这个聊天室的小项目。 项目环境 JDK1.7、Tomcat7、MyEclipse 项目结构 项目jar文件 项目实现的功能 1.即时聊天功能 类似QQ和微信的聊天方式,目前测试版本只能发送文字信息,敬请期待后续版本吧! 2.生成聊天记录文件 每一次发送的聊天信息,包括上线下线的记录,都会被写入到 ...

Java线程中sleep()和wait()的区别

sleep() sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。 因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个 ...

Java中Servlet的执行流程和生命周期

执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request、response对象传递给找到的servlet,servlet根据request就可以知道是谁发出的请求,请求信息及其他信息,当servlet处理完业务逻辑后会将信息放入到response并响应到客户端。 生命周期 ...

Java中String,StringBuilder,StringBuffer三者的区别

String字符串常量 由多个字符组成的一串数据,相当于字符数组。字符串是常量,它们的值在创建之后不能更改。 StringBuilder、StringBuffer可变字符序列 StringBuffer :同步的,线程安全,效率较StringBuilder低。 StringBuilder :不同步的,线程不安全,效率高。 单线程情况下做字符串拼接,推荐使用 Stri ...

Java经典排序算法-快速排序

基本思想 1.在待排序的元素任取一个元素作为基准(通常选第一个元素),称为基准元素; 2.将待排序的元素进行分区,比基准元素大的元素放在它的右边,比其小的放在它的左边; 3.对左右两个分区重复以上步骤直到所有元素都是有序的。 排序方法 首先我们要明确每一轮的排序目的: 用基准数将数组以左侧值小于基准数,右侧值大于基准数隔开。 定义一个基准数 k (取数组首位),定义最低位 i ...

Java抽象类和接口的区别

1.抽象类是abstract class修饰,接口是interface修饰。 2.抽象类可以有任意类型的属性,接口只能有静态常量属性。 3.抽象类可以有普通方法和抽象方法,接口的方法都是抽象方法。 4.抽象类和接口都不能实例化,但是抽象类有构造方法,接口没有构造方法。 5.抽象类只能单根继承,接口可以多重实现。