关于线程安全的一点总结
先写一点,以后再慢慢改:
1.synchronized(同步锁):以时间换取安全,效率低下
2.ThreadLocal:以空间换取时间,比较消耗资源,安全
3.单例模式用双重锁比价好,线程安全且效率还行
4.线程的挂起有wait(被动,需要外界唤起),sleep(主动,不释放资源),当然,叫挂起好像有点不太合适,我这里只是说这个意思。唤起有:notify(他是随机唤起的),一般用nofityAll(唤起所有其他线程),更底层的可以用LocalSupport,可以控制线程的等待与开启(好像是synchronized的底层实现,具体我也没有去研究源码)
5.Thread类,Runnable接口(Thread的底层实现,有时候不能用thread可以用runnable),Callable接口(有返回值)
6.原子类(automaticinteger等),用来解决多线程问题,因为其具有原子性(也就是说转换为汇编语言是一句,机器一次只会执行一个这种语句,跟我们原来学习的
MOVE AL,BL类似吧)
7.线程安全的类:hashtable,enumeration,statck,vector,stringbuffer等
8、四种线程池
newCacheThreadPool(), 创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,如果线程池长度小于处理需求,则新建线程
newFixedThreadPool(),创建一个定长的线程池,可控制现场最大并发数,超出的线程会在线程队列中等待
newScheduledThread()创建一个定长的线程池,支持定时,周期性的执行任务
newSingleThreadExecutor(),创建一个单线程化的线程池,它只会用唯一的工作线程类执行任务,保证所有任务按照指定顺序执行;
其他的以后想到再说