今天看到一句话 感觉很喜欢:做人先要热血充沛 时间不能够浪费 生活也该有些滋味

1.

2018_02_28牛客网刷题_JAVA基础知识

2.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

3.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

4.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

5.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

6.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

7.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

8.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

9.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

10.

2018_02_28牛客网刷题_JAVA基础知识

事务属性的种类:   传播行为、隔离级别、只读和事务超时

 

a)   传播行为定义了被调用方法的事务边界。

 

传播行为

意义

PROPERGATION_MANDATORY

表示方法必须运行在一个事务中,如果当前事务不存在,就抛出异常

PROPAGATION_NESTED

表示如果当前事务存在,则方法应该运行在一个嵌套事务中。否则,它看起来和 PROPAGATION_REQUIRED 看起来没什么俩样

PROPAGATION_NEVER

表示方法不能运行在一个事务中,否则抛出异常

PROPAGATION_NOT_SUPPORTED

表示方法不能运行在一个事务中,如果当前存在一个事务,则该方法将被挂起

PROPAGATION_REQUIRED

表示当前方法必须运行在一个事务中,如果当前存在一个事务,那么该方法运行在这个事务中,否则,将创建一个新的事务

PROPAGATION_REQUIRES_NEW

表示当前方法必须运行在自己的事务中,如果当前存在一个事务,那么这个事务将在该方法运行期间被挂起

PROPAGATION_SUPPORTS

表示当前方法不需要运行在一个是事务中,但如果有一个事务已经存在,该方法也可以运行在这个事务中

 

 

 

 

b)   隔离级别

在操作数据时可能带来 3 个副作用,分别是脏读、不可重复读、幻读。为了避免这 3 中副作用的发生,在标准的 SQL语句中定义了 4 种隔离级别,分别是未提交读、已提交读、可重复读、可序列化。而在 spring 事务中提供了 5 种隔离级别来对应在 SQL 中定义的 4 种隔离级别,如下:

隔离级别

意义

ISOLATION_DEFAULT

使用后端数据库默认的隔离级别

ISOLATION_READ_UNCOMMITTED

允许读取未提交的数据(对应未提交读),可能导致脏读、不可重复读、幻读

ISOLATION_READ_COMMITTED

允许在一个事务中读取另一个已经提交的事务中的数据(对应已提交读)。可以避免脏读,但是无法避免不可重复读和幻读

ISOLATION_REPEATABLE_READ

一个事务不可能更新由另一个事务修改但尚未提交(回滚)的数据(对应可重复读)。可以避免脏读和不可重复读,但无法避免幻读

ISOLATION_SERIALIZABLE

这种隔离级别是所有的事务都在一个执行队列中,依次顺序执行,而不是并行(对应可序列化)。可以避免脏读、不可重复读、幻读。但是这种隔离级别效率很低,因此,除非必须,否则不建议使用。

 

 

 

 

c)    只读

如果在一个事务中所有关于数据库的操作都是只读的,也就是说,这些操作只读取数据库中的数据,而并不更新数据,那么应将事务设为只读模式( READ_ONLY_MARKER ) , 这样更有利于数据库进行优化 。

因为只读的优化措施是事务启动后由数据库实施的,因此,只有将那些具有可能启动新事务的传播行为(PROPAGATION_NESTED 、 PROPAGATION_REQUIRED 、 PROPAGATION_REQUIRED_NEW) 的方法的事务标记成只读才有意义。

如果使用 Hibernate 作为持久化机制,那么将事务标记为只读后,会将 Hibernate 的 flush 模式设置为FULSH_NEVER, 以告诉 Hibernate 避免和数据库之间进行不必要的同步,并将所有更新延迟到事务结束。

d)   事务超时

如果一个事务长时间运行,这时为了尽量避免浪费系统资源,应为这个事务设置一个有效时间,使其等待数秒后自动回滚。与设

置“只读”属性一样,事务有效属性也需要给那些具有可能启动新事物的传播行为的方法的事务标记成只读才有意义。

11.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

12.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

13.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

14.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

15.

2018_02_28牛客网刷题_JAVA基础知识

2018_02_28牛客网刷题_JAVA基础知识

16.

2018_02_28牛客网刷题_JAVA基础知识

选DE.
1、ThreadLocal的类声明:
public class ThreadLocal<T>
可以看出ThreadLocal并没有继承自Thread,也没有实现Runnable接口。所以AB都不对。
2、ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。
所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立,C选项错。
由于每个线程在访问该变量时,读取和修改的,都是自己独有的那一份变量拷贝,不会被其他线程访问,
变量被彻底封闭在每个访问的线程中。所以E对。
3、ThreadLocal中定义了一个哈希表用于为每个线程都提供一个变量的副本:
 static class ThreadLocalMap {

        static class Entry extends WeakReference<ThreadLocal> {
            /** The value associated with this ThreadLocal. */
            Object value;

            Entry(ThreadLocal k, Object v) {
                super(k);
                value = v;
            }
        }

        /**
         * The table, resized as necessary.
         * table.length MUST always be a power of two.
         */
        private Entry[] table;
}
所以D对。


相关文章: