Java并发

  1. 线程安全:在堆内存中的数据由于可以被任何线程访问到,在没有限制的情况下存在被意外修改的风险。即堆内存空间在没有保护机制的情况下,对多线程来说是不安全的地方,因为你放进去的数据,可能被别的线程“破坏”。
    https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453140919&idx=1&sn=33c1d972afd3476cd78971b372d59d56&scene=21#wechat_redirect

  2. Synchronizied
    synchronized 关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。
    1.https://mp.weixin.qq.com/s/ts2Pjz3VpWm50kY-Ru7iTA
    2.https://mp.weixin.qq.com/s?__biz=MzUxODAzNDg4NQ==&mid=2247487236&idx=2&sn=1475f0250734b8ec2ee7bda4905b3b05&scene=21#wechat_redirect
    3.锁撤销源码https://www.jianshu.com/p/7445361e187f
    4.https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453142528&idx=1&sn=34b26e408e1f8adcd8d8257522705171&scene=21#wechat_redirect
    5.https://blog.csdn.net/u014590757/article/details/79717549
    6.https://www.jianshu.com/p/e62fa839aa41

  3. Volatile
    1.https://mp.weixin.qq.com/s?__biz=MzUxODAzNDg4NQ==&mid=2247486859&idx=1&sn=a09919f9d1877b4188664294ef4694d7&scene=21#wechat_redirect
    2.https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453142004&idx=1&sn=81ccddb6c8b37114c022c4ad50368ecf&scene=21#wechat_redirect
    3.https://mp.weixin.qq.com/s/DiEftiV_kTOlR4YmD4pggg
    4.https://zhuanlan.zhihu.com/p/133851347

  4. ThreadLocal
    ThreadLocal的作用主要是做数据隔离,填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的,在多线程环境下,防止自己的变量被其它线程篡改。
    1.https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453144870&idx=1&sn=9be678c536d061e0c0d10db1be58dc07&scene=21#wechat_redirect
    2.https://mp.weixin.qq.com/s/s6rNuKVTANd20tLv2d3WPg
    3.https://snailclimb.gitee.io/javaguide-interview/#/./docs/b-3Java%E5%A4%9A%E7%BA%BF%E7%A8%8B?id=_2318-threadlocal-%e4%ba%86%e8%a7%a3%e4%b9%88%ef%bc%9f

  5. 线程池
    降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
    提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
    提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
    1.https://mp.weixin.qq.com/s?__biz=MzI3ODA0ODkwNA==&mid=2247484094&idx=1&sn=1b80441305d3ccf68eb122c13c89a9d9&chksm=eb5dbb59dc2a324f7ddff35bdfe0ddf8c1b1b559e95f8eada8302516f91fd509e0fa5bc90a25&scene=178&cur_album_id=1690115551995478017#rd
    2.https://mp.weixin.qq.com/s?__biz=MzU4NzA3MTc5Mg==&mid=2247484036&idx=1&sn=75e9e93a82a811e9c71b8127cf7ac677&chksm=fdf0eadbca8763cd7ab74757f9472d061c0244d2373a1ea85b1cbc833941441fdb1e91ead5b4&cur_album_id=1657204970858872832&scene=21#wechat_redirect
    3.https://snailclimb.gitee.io/javaguide/#/docs/java/multi-thread/2020%E6%9C%80%E6%96%B0Java%E5%B9%B6%E5%8F%91%E8%BF%9B%E9%98%B6%E5%B8%B8%E8%A7%81%E9%9D%A2%E8%AF%95%E9%A2%98%E6%80%BB%E7%BB%93 线程池部分

  6. AQS
    AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器。比如 ReentrantLock,Semaphore, ReentrantReadWriteLock。AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制 AQS 是用 CLH 队列锁实现的,即将暂时获取不到锁的线程加入到队列中。
    1.https://mp.weixin.qq.com/s?__biz=MzU4NzA3MTc5Mg==&mid=2247484035&idx=1&sn=ccaec352e192f1fd40020d9a984e9461&chksm=fdf0eadcca8763ca5c44bd19118fd00e843c163deb40cda444b3fc08430c57760db15eca1ea6&scene=178&cur_album_id=1657204970858872832#rd
    2.https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453147094&idx=2&sn=ea2a2daa99b0c94874ced4946cd4f175&scene=21#wechat_redirect
    3.CountDownLatch,CyclicBarrier,Semaphore https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453142052&idx=2&sn=9435603082c09a643049299f5b5b68d7&scene=21#wechat_redirect

推荐阅读更多精彩内容