1. 多线程基础
1.1 线程同步
1.1.1 线程安全API与非线程安全API
StringBuffer 是同步的 synchronized append0;
·StringBuilder 不是同步的 append();
Vector和 Hashtable 是同步的
ArrayList和HashMap 不是同步的
获取线程安全的集合方式
- Collections.synchronizedList()
获取线程安全的List集合
- CollectionssynchronizedMap()
获取线程安全的Map
1.1.2 使用ExecutorService实现线程池
ExecutorService是java提供的用于管理线程池的类
线程池有两个主要作用:
- 控制线程数量
- 重用线程
当一个程序中若创建大量线程,并在任务结束后销毁会给系统带来过度消耗资源,以及过度切换线程的危险从而可能导致系统崩溃。为此我们应使用线程池来解决这个问题。
使用ExecutorService实现线程池(续1)
线程池的概念:首先创建一些线程,它们的集合称为线程池,当服务器接受到一个客户请求后,就从线程池中取出一个空闲的线程为之服务,服务完后不关闭该线程而是将该线程还回到线程池中。
在线程池的编程模式下,任务是提交给整个线程池,而不是直接交给某个线程,线程池在拿到任务后,它就在内部找有无空闲的线程,再把任务交给内部某个空闲的线程,
一个线程同时只能执行一个任务,但可以同时向一个线程池提交多个任务
使用ExecutorService实现线程池(续2)
线程池有以下几种实现策略
-Exe