博客说明面试
文章所涉及的资料来自互联网整理和我的总结,意在于我的学习和经验汇总,若有什么地方侵权,请联系本人删除,谢谢!
会话(Session)Bean、实体(Entity)Bean 、消息驱动的(Message Driven)Beanredis
会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种数据库
实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种。安全
锁机制的做用是保证共享资源能够进行排他性的访问网络
悲观锁悲观的认为在数据处理过程当中极有可能存在修改数据的并发事务(包括本系统的其余事务或来自外部系统的事务),因而将处理的数据设置为锁定状态。多线程
数据库中主要是经过数据库底层的锁机制才能保证真正的数据访问排他性。并发
缺点:并发量不高,效率低;less
乐观锁对并发事务持乐观态度(认为对数据的并发操做不会常常性的发生),经过更加宽松的锁机制来解决因为悲观锁排他性的数据访问对系统性能形成的严重影响。最多见的乐观锁是经过数据版本标识来实现的异步
多线程不必定比单线程效率高,多线程的本质就是CPU经过轮换时间片执行不一样的线程,看似多个线程一块儿执行,可是却承担线程上下文切换的代价。函数
而对于Redis这样的内存数据库来讲,没有上下文的切换的单线程效率是最高的。Redis用单个CPU绑定一块内存的数据,而后针对这块内存的数据进行屡次读写操做都是在一个CPU上完成的。
(1)继承Thread类,重写run函数
(2)实现Runnable接口,重写run函数
开启线程:Thread t = new Thread(对象) //建立线程对象
t.start()
(3)实现Callable接口,重写call函数
Callable是相似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
①Callable规定的方法是call(),而Runnable规定的方法是run()
②Callable的任务执行后可返回值,而Runnable的任务是不能返回值的
③call()方法可抛出异常,而run()方法是不能抛出异常的。
④运行Callable任务可拿到一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果.经过Future对象可了解任务执行状况,可取消任务的执行,还可获取任务执行的结果
在操做系统中,线程是不拥有资源的,进程是拥有资源的。而线程是由进程建立的,一个进程能够建立多个线程,这些线程共享着进程中的资源。因此,当线程一块儿并发运行时,同时对一个数据进行修改,就可能会形成数据的不一致性
加锁。
不共享状态
可使用final修饰的对象保证线程安全,因为final修饰的引用型变量(除String外)不可变是指引用不可变,但其指向的对象是可变的,因此此类必须安全发布,也即不能对外提供能够修改final对象的接口。
Java内存模型分为主内存,和工做内存。主内存是全部的线程所共享的,工做内存是每一个线程本身有一个,不是共享的。
每条线程还有本身的工做内存,线程的工做内存中保存了被该线程使用到的变量的主内存副本拷贝。线程对变量的全部操做(读取、赋值),都必须在工做内存中进行,而不能直接读写主内存中的变量。不一样线程之间也没法直接访问对方工做内存中的变量,线程间变量值的传递均须要经过主内存来完成
感谢
牛客网万能的网络
以及勤劳的本身