线程基础

1,信号量是限制访问共享资源的线程数,Semaphore.acquire()获得许可,release释放许可
同步集合 Collections.synchronizedList

2,

java.util.concurrent.Executors类的4种实现方法
线程池可以控制数目 即对线程安全有好处
(1) newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程
(2) newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
(3) newScheduledThreadPool 预定的 计划表
创建一个定长线程池,支持定时及周期性任务执行。延迟执行示例代码如下:
(4) newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行

java.util.concurrent.ScheduledThreadPoolExecutor继承ThreadPoolExecutor 继承AbstractExecutorService 实现ScheduledExecutorService接口 实现ExecutorService接口
多线程的定时任务 timer单线程
AbstractExecutorService实现ExecutorService接口 实现Executor接口

自定义线程池,因为这几个方法都是无界的,高并发不安全

3,

blockingqueue java并发包 是线程安全的 控制线程同步的工具包 生产者消费者模型
使用BlockingQueue,不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,这些内容BlockingQueue都已经做好了,即什么时候为空 满了
任务顺序执行,任务扔到队列中  线程执行顺序不确定
new ArrayBlockingQueue<Runnable> 有界 link无界 可以指定界限

4,

并行处理是多核处理,然后将结果合并
多线程是程序执行多个任务

5,

CountDownLatch是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行。 车上满了 开车走

CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。 一起旅游 人到齐了 一起走

从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。
它的作用就是会让所有线程都等待完成后才会继续下一步行动

6,threadlocal为每个线程保留一份数据,多线程也不会有线程安全问题,其实是一个map,key是线程

posted @ 2019-04-03 16:32  song123666  阅读(102)  评论(0编辑  收藏  举报