1HashMap,HashTable,ConcurrentHashMap 之间的区别, 及性能对比
性能:concurrenthashMap线程安全, haspMap非线程全, HashTable 线程安全
区别:
- hashmap是非线程安全,hashtable是线程安全
- hashmap的键允许null值存在,hashtable不允许
- hashmap效率高,hashtable线程低
- hashtable是同步的,hashmap不是线程同步
- hashmap适用于单线程,hashtable不适用于单线程,一般不建议使用hashtable
- hahsptable使用的是sunchronized关键字修饰conurrhashmap是使用了锁分段技术老保证线程安全
2Java多线程
2.1什么是线程?线程和进程的区别
线程:是进程的一个实体,是比进程小的独立运行经本单位
区别:
线程的划分尺度小于进程,使线程程序拥有高并发性,
进程:运行时内存是独立的
线程:线程之间,内存共享
2.2创建线程有几种方式
1继承thread类
实现了runnable接口的一个实例,代表一个进程的实例,
2实现runnable接口
如果类已经extends另一个类,无法直接extendsThread可以实现runnable接口
3实现Callable接口
实现callable接口实现类,实现call()方法
创建callable实现类的实例tt
使用futuretable类包装callable的实例tt
以futretask对象作为thread的target来实例线程并启动
调用futuretask对象的get()方法获得返回值
4什么是线程池
1线程池就是将多个线程对象放到容器中不用new可以直接使用提高了效率
2常用的线程池
单线程的线程池
固定大小的线程池
可缓存的线程池
大小无限线程池
5线程池的基本方法
1线程等待
会释放对象的锁
2线程睡眠
Sleep不会释放当前占有的锁
3线程让步
让出CPU执行时间片
4线程中断
线程的一个通信信号影响这个线程内部的一个中断标识位
5Join等待其他线程终止
Join()方法
6线程唤醒
在对象监视器等待带个线程,直到当前的线程放弃对象上的锁定,才能执行被唤醒的线程