1、volatile:确保了数据的可见性(无法保证数据的原子性、有序性),原理是它会立即把操作先更新到线程内存中,然后更新到主存中。其他线程把数据从主存更新到线程内存中。
2、ThreadLocal:确保数据的独立性(每个线程数据都是独立的),它在线程内部有独立的内存副本
3、Thread:线程类,生命周期为创建(new)、准备就绪(start,runnable)、运行(running)、阻塞(blocked)、time waiting(睡眠或等待一定的事件)、waiting(等待被唤醒)、消亡(dead)。注意点:
sleep()方法挂起线程,可指定时间,但是不释放锁;yield()方法挂起线程(给相同优先级线程用);
join/wait方法阻塞线程,会释放锁。notify/notifyAll()会唤醒一个等待该锁的线程,等线程结束,在释放锁。
interrupt()停止线程(是给线程打了个停止标签,而不是立即停止)
![](https://img.haomeiwen.com/i13132157/1353a6795692cd6f.png)
3、Runnable:接口,可以创建线程,(通过Thread.start()调用run())
4、Callable<V>:泛型参数化接口,可以有返回值,(只能ExecutorService的submit方法去启动call)
5、Future<V>:用于追踪一个异步任务的结果(ExecutorService的submit返回的是Future),有以下方法:get():方法结束返回一个结果,不然就阻塞;
cancel():停止任务;isDone():方法是否完成;isCancel():方法是否取消。
6、FutureTask:Future接口的一个唯一实现类,实现了Runnable接口,可以被Thread和ExecutorService执行。
7、Executors:实现ExecutorService接口;可以创建以下线程池:newFixedThreadPool(int)适用于稳定固定数目、
newScheduledThreadPool(int)调度型线程池、SingleThreadExcutor()单例线程池、newCachedThreadPool()缓存型线程池,适用于生命周期短的异步任务。
ExecutorService有如下方法:execute()执行线程,submit()执行线程(支持返回值future),shutdown()关闭线程池(等待提交的线程执行完)shutdownnow()立刻关闭线程池(有提交、正在执行的线程也中断),invokeAll(tasks)批量提交任务,返回List<future<V>>
8、ThreadPoolExecutor :自定义线程池
9、AQS:抽象队列同步器,用了volatie变量和fifo队列实现。有以下方法:tryAcquire()独占式获取同步状态;tryRelease()独占式释放同步状态;
tryAcquireShared()共享式获取同步状态;tryReleaseShared()共享式释放同步状态;isHeldExclusively()是否被当前线程所独占.
10、CAS:基于硬件的算法机制(不适用于竞争严重,自旋概率大)。V(要更新的值)、E(预期值)、N(新值),if(v=e),v=N。
ABA问题,循环时间长开销大和只能保证一个共享变量的原子操作(可以加版本号解决)
![](https://img.haomeiwen.com/i13132157/363ae5c940a391c9.png)
11、CountDownLatch:控制某个或者多个线程,让它们等待多个线程完成某项任务后,再启动;await()等待,如果计数器==0被唤醒;
countDown(),任务执行完-1;
12、synchronized:内置锁;无法被中断,无法设置公平锁,可重入(解决多个线程对同一资源的并发访问)
13、Semaphore:解决多副本资源的共享访问;acquire()申请信号量;release()释放
14、Lock:(解决多个线程对同一资源的并发访问)ReentrantLock可重入锁;ReentrantReadWriteLock读写锁
15、CyclicBarrier:实现让一组线程等待至某个状态之后再全部同时执行,当所有等待线程都被释放以后,CyclicBarrier可以被重用,wait(),等待多个线程执行后再继续后续操作
16、原子变量:AtomicInteger、AtomicBoolean
参考网址:concurrenthttps://blog.csdn.net/qq_25827845/article/details/76422930;
https://www.jianshu.com/p/46728d6bc6b2
网友评论