知识点总结
标题6HashMap,HashTable,ConcurrentHashMap之间的区别,及性能对比?
从性能上看:ConcurrentHashMap(线程安全)>HashMap>HashTable(线程安全)
HashMap和HashTable区别有:
1、HashMap是非线程安全的,允许有null值和null键,效率高,不是同步的,适合单线程环境
2,HashTable是线程安全的,不允许有null值和null键,效率低,是同步的,适合多线程环境
HashTable和ConcurrentHashMap区别:
HashTable使用的是Synchronized关键字修饰,
ConcurrentHashMap是使用了锁分段技术来保证线程安全的,同时效率也比HashMap要高。
标题3.1什么是线程?线程和进程的区别?
进程是系统中正在运行的一个程序,程序一旦运行就是进程而线程是进程的一个实体,是进程的一条执行路径。
区别:
1,线程的划分尺度小于进程,这使多线程程序拥有高并发性,
2,进程在运行时各自内存单元相互独立,线程之间内存共享,
3,线程上下文切换比进程上下文切换快得多
标题3.2创建线程有几种方式
1.继承Thread类
Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个本地方法,它将启动一个新线程,并执行run()方法。
2.实现Runnable接口
需要注意的是如果自己的类已经继承另一个类,就无法直接继承Thread,此时,可以实现一个Runnable接口。
3.实现Callable接口
Callabled接口以call()方法作为线程执行体call()方法可以有返回值,可以声明抛出异常类。
4.通过线程池方法
标题1.什么是线程池,如何使用?
线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用new线程而是直接去池中调用线程即可,节省了开辟子线程的时间,提高了代码执行效率。
合理应用线程池能够带来三个好处:
1.降低资源消耗:重复利用已创建的线程降低线程创建和销毁造成的消耗。
2.提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行。
3.提高线程的可管理性:使用线程池可以进行统一的分配,调优和监控
标题2.常用的线程池有哪些?
1.单线程的线程池:此线程池保证所有任务的执行顺序
按照任务的提交顺序执行。
2.固定大小的线程池,每次提交一个任务就创建一个线程,直到
线程达到线程池的最大大小。
3.可缓存的线程池,此线程池不会对线程池大小做限制,线
程池大小完全依赖于操作系统(JVM),能够创建的最大线程大小。
4.大小无限的线程池,此线程池支持定时以及周期性执行任务的需求。
5.单线程的线程池。此线程池支持定时以及周期性执行
任务的需求。
标题3.2线程的基本方法有什么?
线程相关的基本方法有wait,notify,notifyAll,sleep,join,yield等。
1.wait(线程等待):
调用该方法的线程进入等待状态,只有等待另外线程的通知或被中断才会返回,因为调用wait()方法后,会释放对象的锁。所以wait方法一般用在同步方法或同步代码块中。
2.Notif,NotifyAll(线程唤醒):
notif是唤醒在此对象监视器上等待的单个线程直到当前的线程放弃此对象上的锁,才能继续执行被唤醒的线程.
而notifyAll()是唤醒再监视器上等待的所有线程。
3.sleep(线程睡眠):
sleep导致当前线程休眠,不会释放当前占有的锁,同时会导致线程进入记时-等待状态
4.join(等待其他线程终止):
调用join()当前线程转为阻塞状态,回到另一个线程结束,当前线程再由阻塞状态变为就绪状态,等待cpu调用
5.yield(线程让步):
yield会使当前线程让出CPU执行时间片,与其他线程一起重新竞争CPU时间片
6.interrupt(线程中断):
中断一个线程,给这个线程一个通知信号,影响这个线程内部的一个中断标识位。而这个线程本身并不会改变状态(如阻塞,终止等)