拓展知识点

来源:互联网 发布:分销网络的设计 编辑:程序博客网 时间:2024/04/28 06:52
  • JDK1.5新增的功能   ==>>>
  • 字符流和字节流的区别,使用场景,相关类   ==>>>
  • 线程安全的概念,实现线程安全的几种方法   ==>>>
  • 抽象类和接口的区别,使用场景   ==>>>
  • hash算法的实现原理,hashcode的实现原理   ==>>>
  • error和exception的区别,RuntimeException和非RuntimeException的区别   ==>>>
  • 继承与组合的区别,使用场景   ==>>>
  • 使用静态工厂方法的好处和坏处   ==>>>
  • 排序算法,他们是时间复杂度是多少   ==>>>
  • 数据库设计原则、范式   ==>>>
  • 数据库常用的编码方式有哪几种
  • 如果有10万条学生成绩信息,怎么获取成绩最高的那一条数据,怎么获取成绩第三的那一条数据,列举你认为性能最好的方式   ==>>>
  • 序列化的作用,应用场景,除了网路传输   ==>>>
  • spring的IOC、AOP的使用场景   ==>>>
  • ajax是否能跨域请求,解决的办法   ==>>>
  • 解析xml的几种方法,他们的原理   ==>>>
  • 怎么样实现高性能的代码  ==>>>
  • 如果有和其他系统有接口调用,但其他系统还没开发完成,怎么进行单元测试   ==>>>
  • 防止重复提交有哪几种方式 (这个网上很多,可以google下)
  • 怎么样运用样式设计一个DIV浮出层
  • 数据库连接池的实现原理,请求怎么样去获取连接,,关闭连接时,连接池是销毁连接还是回收连接   ==>>>
  • tomcat、weblogic、jboss的区别,容器的作用   ==>>>
  • apache是容器么,它的作用是什么   ==>>>
  • 内部跳转和外部跳转的区别,底层实现原理   ==>>>
  • http和https的区别   ==>>>
  • 宕机的原因有哪几种,怎么样分析宕机的原因,如:数据库的长连接。。。   ==>>>
  • 在velocity页面,为什么不推荐不推荐使用宏定义   ==>>>
  • webx的核心原理,webx框架和velocity的优缺点   ==>>>
  • 页面上如果有一个screen和两个control,那么他们有几个context   ==>>>
  • 一个含有layout、screen和control的页面,他们的加载顺序是什么,是等所有的加载完一起显示,还是其他。。。   ==>>>
  • #if($!a=='true')会出问题么,为什么   ==>>>
  • 支付宝怎么样保证他的安全,他的调用异常分哪几种   ==>>>
  • 项目中你觉得做得最好的是什么   ==>>>
  •  

    JAVA实现同步的方法

    1 wait方法:
      该方法属于Object的方法,wait方法的作用是使得当前调用wait方法所在部分(代码块)的线程停止执行,并释放当前获得的调用wait所在的代码块的锁,并在其他线程调用notify或者notifyAll方法时恢复到竞争锁状态(一旦获得锁就恢复执行)。
      调用wait方法需要注意几点:
      第一点:wait被调用的时候必须在拥有锁(即synchronized修饰的)的代码块中。
      第二点:恢复执行后,从wait的下一条语句开始执行,因而wait方法总是应当在while循环中调用,以免出现恢复执行后继续执行的条件不满足却继续执行的情况。
      第三点:若wait方法参数中带时间,则除了notify和notifyAll被调用能激活处于wait状态(等待状态)的线程进入锁竞争外,在其他线程中interrupt它或者参数时间到了之后,该线程也将被激活到竞争状态。
      第四点:wait方法被调用的线程必须获得之前执行到wait时释放掉的锁重新获得才能够恢复执行。

    2 notify方法和notifyAll方法:
      notify方法通知调用了wait方法,但是尚未激活的一个线程进入线程调度队列(即进入锁竞争),注意不是立即执行。并且具体是哪一个线程不能保证。另外一点就是被唤醒的这个线程一定是在等待wait所释放的锁。
      notifyAll方法则唤醒所有调用了wait方法,尚未激活的进程进入竞争队列。

    3 synchronized关键字:
      第一点:synchronized用来标识一个普通方法时,表示一个线程要执行该方法,必须取得该方法所在的对象的锁。
      第二点:synchronized用来标识一个静态方法时,表示一个线程要执行该方法,必须获得该方法所在的类的类锁。
      第三点:synchronized修饰一个代码块。类似这样:synchronized(obj) { //code.... }。表示一个线程要执行该代码块,必须获得obj的锁。这样做的目的是减小锁的粒度,保证当不同块所需的锁不冲突时不用对整个对象加锁。利用零长度的byte数组对象做obj非常经济。

    原创粉丝点击