![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程和高并发详解
学习多线程和高并发
萧弈X
这个作者很懒,什么都没留下…
展开
-
【高并发】容器
hashtable 加锁(基本不用)hashmap 不加锁加锁的hashMap Map<Integer, String> m = Collections.synchronizedMap(new HashMap<Integer, String>());ConcurrentHashMap 插入时会有各种判断,所以效率会低,但读的速度很快。Vector 自带锁 (基本不用)TreeMap 红黑树实现在CAS操作是对树不好操作,所以用ConcurrentSkipListMap原创 2021-04-17 13:44:39 · 59 阅读 · 0 评论 -
【并发】线程池
学线程池需要了解ExecutorExecutorService: submit()//异步方法future :get()FutureTask (常用) FutureTask<Integer> task =new FutureTask<Integer>(new Callable(){ @Override public Object call() throws Exception { TimeU原创 2021-04-13 18:45:44 · 106 阅读 · 0 评论 -
ReentrantLock实现消费者生产者
public class a01_Lock<T> { //生产的东西 final private LinkedList<T> lists = new LinkedList<T>(); //能够放的最大数量 final private int MAX = 10; //数量 private int count = 0; //锁 private Lock lock = new ReentrantLock();原创 2021-04-11 11:32:23 · 107 阅读 · 0 评论 -
并发编程三大特性(重要)
可见性有序性原子性可见性 private static boolean running =true; public static void main(String[] args) { Thread t = new Thread(()-> { while (running){ System.out.println("a"); } }); t.start();原创 2021-04-10 11:12:05 · 192 阅读 · 0 评论 -
CAS、锁
cas 期望值、更新值原创 2021-04-09 17:50:32 · 728 阅读 · 0 评论 -
线程的中断标志位
interrupt()打断每个线程(设置标志位)isInterrupted()查询某个线程是否被打断过(查询标志位)static interrupted()查询当前线程是否被打断过,并重置打断标志当线程sleep或wait、join时,如果这时设置标志位会产生InterruptedException异常,catch后可以进行处理,标志位也会复位。锁操作不会被Interrupte()干扰lockInterruptibly()可以干扰,使其抛出异常,catch异常后可以进行自定义操作。面试题:怎么优原创 2021-04-09 12:05:52 · 1103 阅读 · 0 评论 -
线程状态
1、NEW 线程刚刚创建,还没启动2、RUNNABLE :可运行状态RUNNABLE 分为READY和RUNNING3、WAITING : 等待被唤醒4、TIMED WAITING:隔一段时间后自动唤醒5、BLOCKED:被阻塞,正在等待锁6、TERMINATED:线程结束...原创 2021-04-09 11:26:10 · 66 阅读 · 0 评论 -
单例模式的懒汉式双重检查
public class Singleton { private Singleton singleton; public Singleton getInstance() { //这句是提高效率,没必要每次都去加锁,加锁是很费时间的。 if (this.singleton == null) { //加锁防止高并发,很多线程已经冲进这里 A点 synchronized (Singleton.class) {原创 2021-04-09 10:58:15 · 283 阅读 · 0 评论 -
线程笔记
线程创建线程的三种方法1.继承Thread类创建线程2.实现Runnable接口创建线程3.实现Callable接口创建线程,重写call()方法public class Main { public static void main(String[] args) throws Exception { // 将Callable包装成FutureTask,FutureTask也是一种Runnable MyCallable callable = new MyCalla原创 2021-03-07 22:48:43 · 48 阅读 · 0 评论 -
synchronized和lock及锁升级
线程创建:继承Thread类、实现Runable接口、使用线程池调用run()只是使用方法没有创建新线程调用start()才能创建线程并调用run()synchronized锁的是对象,synchronized方法锁的是当前类对象,锁定方法和非锁定方法可以同时使用。锁升级偏向锁,只有一个线程时,只记录这个线程id自旋锁,发生线程争用时进行升级,一个线程占用cpu,其他线程在cpu中自旋等待系统锁,自旋10以后还没等到,就升级为重量级锁。线程少,时间短时用自旋锁,否则用系统锁...原创 2021-03-31 23:12:00 · 220 阅读 · 0 评论 -
进程、线程概念及其面试题
进程:一个程序可以在内存中有很多份,每一份都是一个进程,系统会给他分配资源。原创 2021-04-09 10:36:17 · 73 阅读 · 0 评论