随笔分类 -  Java并发编程实战

Java并发编程实战
摘要:需求: 假设有10万个用户,现在节假日做活动,需要给每个用户发送一条活动短信,为了提高程序的效率,建议使用多线程分批发送. 这里值得注意的是: 每开一个线程都会占用CPU的资源,所以线程根据所需要的条数来决定就好,避免浪费,我们用的是一个小例子,只是说明了多线程处理提高了效率,实际的大规模场景中不建 阅读全文
posted @ 2019-09-15 21:49 城南少年与猫 阅读(1457) 评论(0) 推荐(0)
摘要:1.jvm内存模型 硬件内存模型 处理器 》高速缓存 》缓存一致性协议 》主存 java内存模型 线程《 》工作内存《 》save和load 《 》主存 java内存间的交互操作 (1)lock(锁定):作用于主内存的变量,把一个变量标记为一条线程独占状态 (2)unlock(解锁):作用于主内存的 阅读全文
posted @ 2019-06-02 13:01 城南少年与猫 阅读(406) 评论(0) 推荐(0)
摘要:1.为什么要使用线程池? ​ 诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP、FTP )、通过 JMS队列或者可能通过轮询数据库。 ​ 不管请求如何到达 阅读全文
posted @ 2019-06-01 16:59 城南少年与猫 阅读(206) 评论(0) 推荐(0)
摘要:1.CountDownLatch await(),进入等待的状态 countDown(),计数器减一 应用场景:启动三个线程计算,需要对结果进行累加。 2.CyclicBarrier 栅栏 允许一组线程相互等待达到一个公共的障碍点,之后再继续执行 跟countDownLatch的区别 CountDo 阅读全文
posted @ 2019-05-21 00:33 城南少年与猫 阅读(337) 评论(0) 推荐(0)
摘要:1.同步容器与并发容器 同步容器 Vector、HashTable JDK提供的同步容器类 Collections.synchronizedXXX 本质是对相应的容器进行包装 同步容器类的缺点 ​ 在单独使用里面的方法的时候,可以保证线程安全,但是,复合操作需要额外加锁来保证线程安全 使用 Iter 阅读全文
posted @ 2019-05-19 22:15 城南少年与猫 阅读(397) 评论(0) 推荐(1)
摘要:1.什么是原子类 一度认为原子是不可分割的最小单位,故原子类可以认为其操作都是不可分割 1.1 为什么要有原子类? 对多线程访问同一个变量,我们需要加锁,而锁是比较消耗性能的,JDk1.5之后, 新增的原子操作类提供了 一种用法简单、性能高效、线程安全地更新一个变量的方式, 这些类同样位于JUC包下 阅读全文
posted @ 2019-05-19 19:58 城南少年与猫 阅读(521) 评论(0) 推荐(0)
摘要:1.wait、notify、notifyAll 何时使用 在多线程环境下,有时候一个线程的执行,依赖于另外一个线程的某种状态的改变,这个时候,我 们就可以使用wait与notify或者notifyAll wait跟sleep的区别 wait会释放持有的锁,而sleep不会,sleep只是让线程在指定 阅读全文
posted @ 2019-05-19 14:19 城南少年与猫 阅读(296) 评论(0) 推荐(0)
摘要:1.锁的分类 自旋锁: 线程状态及上下文切换消耗系统资源,当访问共享资源的时间短,频繁上下文切换不值得。jvm实 现,使线程在没获得锁的时候,不被挂起,转而执行空循环,循环几次之后,如果还没能获得锁,则被挂起 阻塞锁:阻塞锁改变了线程的运行状态,让线程进入阻塞状态进行等待,当获得相应的信号(唤醒或者 阅读全文
posted @ 2019-05-18 17:06 城南少年与猫 阅读(892) 评论(0) 推荐(0)
摘要:1. 什么是线程安全性? 当多个线程访问某个类,不管运行时环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需 要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类为线程安全的。 《并发编程实战》 什么是线程不安全? 多线程并发访问时,得不到正确的结果。 2. 从字节码角 阅读全文
posted @ 2019-05-16 20:57 城南少年与猫 阅读(307) 评论(0) 推荐(0)
摘要:1. 进程与线程的区别 进程:是系统进行分配和管理资源的基本单位 线程:进程的一个执行单元,是进程内调度的实体、是CPU调度和分派的基本单位,是比进程更小的独立运 行的基本单位。线程也被称为轻量级进程,线程是程序执行的最小单位。 一个程序至少一个进程,一个进程至少一个线程。 进程有自己的独立地址空间 阅读全文
posted @ 2019-05-16 11:39 城南少年与猫 阅读(322) 评论(0) 推荐(0)
摘要:1.并发编程的挑战之死锁 ​ 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序请求同一组锁的时候。 例如,如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已经锁住了B,接着尝试对A进行加锁,这时死锁就发生了。线程1永远得不到B,线程2也永远 阅读全文
posted @ 2019-05-13 22:43 城南少年与猫 阅读(269) 评论(0) 推荐(0)