java基础 知乎_java基础(一)

一、学习内容

1.类间关系及UML表示

2.Java集合

1) Java集合总体框架

2) collection接口、Iterable接口

定义:

collection接口继承了Iterable接口,Iterable接口是java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素(此处进行举例)。

使用迭代器进行遍历的例子:

下面具体了解Iterable接口,它的成员方法如下表所示:

除了iterator()是JDK 1.5开始就有的,后两个方法是Java 8新添加的,default修饰符也是Java 8新添加的。被default修饰的方法可以不必由子类实现并且由default修饰的方法在接口中有方法体。

List、Set总结

3) 关于collection集合的选择

4) Map接口

HashMap和HashTable之间的异同:

l HashMap和HashTable都是 无序的,TreeMap是有序的

l HashTable是线程同步的(HashTable的源码中,除了构造方法,所有public方法声明中都有synchronized关键字,但是HashMap源码中并没有,synchronized是用来完成多线程条件下同步工作的),HashMap不是线程同步的,因此HashTable是线程安全的,但是HashMap不是线程安全的

l HashMap的效率较高,HashTable的效率较低

5) 允许值为null的集合

HashSet和LinkedhashSet都允许存在null数据

3.线程

1) 线程与进程

进程是操作系统调度和调配资源的基本单位,而线程是比进程更小的执行单位,每个线程拥有自己的栈和寄存器等资源数据,多个线程之间共享进程的代码数据和文件

2) 线程的优点

创建线程的代价比创建进程的代价小

切换线程的代价比切换进程的代价小

充分利用多处理器

数据共享使线程之间的通信比进程之间的通信更高效

系统繁忙的情况下。进程通过独立的线程及时响应用户的输入

3) Java中实现线程的3种方式

继承Thread类

实现Runnable接口

实现Callable接口

4) 多线程同步

线程同步:当有一个线程在对内存进行操作的时候,其他线程都不可以对这个内存进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作。

线程同步的方法:

同步方法:用synchronized修饰方法,eg:public synchronized void save(){},注:synchronized也可以修饰静态方法,如果调用该静态方法将会锁住整个类

同步代码块:用synchronized修饰语句块 eg: synchronized(){}

使用特殊域变量(volatile)实现线程同步:

l volatile关键字为域变量的访问提供了一种免锁机制

l 使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新

l 每次使用改域就要重新计算,而不是使用寄存器的值

l volatile不会提供任何原子操作,它也不能用来修饰final类型的变量

使用重入锁实现线程同步:ReentrantLock类是可重入、互斥、实现了Lock接口的锁,它的常用的方法有:ReentrantLock():创建一个ReentrantLock实例 lock():获得锁 unlock():释放锁

使用局部变量实现线程同步:如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。ThreadLocal类的常用方法:

ThreadLocal():创建一个线程本地变量 get():返回此线程局部变量的当前线程副本中的值 initialValue():返回此线程局部变量的当前线程的“初始值” set(T value):将此线程局部变量的当前线程副本中的值设置为value

二、存在的问题

HashMap的工作原理

TreeSet的两种比较方式(自然排序、比较器排序)

三、明天学习计划

文件读写、jvm性能优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值