昨天做题了,但是没写日记,今天补上。
5/10
1、
图片说明
在static方法中是不能访问非静态变量 a 的,需要将 a 声明为static,答案才会是 0 ,否则是编译出错。
别忘记了main函数就是一个静态方法。
所以要先初始化一个对象,才能访问其中的数组,输出a0,此时也是0。
2、
图片说明
i=i++ 相当于没对i进行操作
i=++i 对i进行了加一

3、
关于InterruptedException
https://www.cnblogs.com/xll1025/p/6415378.html
文章介绍的很详细

6/10
1、
图片说明
t2>t3
List aList=newArrayList();
List bList=newLinkedList();

aList.add(0,obj); //0代表下标,obj代表对象。每个对象都插入到下标0的位置。
bList.add(0,obj);

此题考察的是ArrayList和LinkedList的特征:同样是新增5000个对象,LinkedLIst比ArrayList更快。

ArrayList:增删慢,查询快。
由于是数据组实现,需要连续的内存空间,如果删除数组中间的值,为了保证下标的有效性,需要将后面的数据往前移,所以删除慢。
当插入A对象到B对象的前面时,需要将B对象和B对象之后的所有对象后移一位,再插入A对象。所以插入慢。
数组的大小是固定的,如果数组满了,需要重新分配空间,new一个新数组并copy旧数据之后再增加新数据,所以增加慢。
因为是连续内存空间,可以通过下标查询数据,所以查询快。

LInkedList:增删快,查询慢。
由于是链表实现,当前节点的next指向下一个节点,prev指向上一个节点,不需要连续的内存空间,所以增删快。
因为不是连续内存空间,所以不能使用下标查询,只能通过next遍历,所以查询慢。

这题要是把0去掉了,单纯的在后面添加obj,也是ArrayList慢,因为它还要不断地扩容。

2、
成员变量:编译和运行都参考左边。
成员函数(非静态):编译看左边,运行看右边
静态函数:编译和运行都看左边。

3、
图片说明

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

    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;

}
ThreadLocal:
https://www.zhihu.com/question/341005993

6/10
1、
马虎了,线程调用start才是启动线程,run方法是直接调用重写的run方法
图片说明

2、
图片说明

3、
图片说明

图片说明