并发编程
kangswx
记录自己的学习历程,欢迎关注、交流
展开
-
线程基础
jps命令查看 pid查看线程的堆栈: jstack pid运行java监视和管理控制台: jconsole并发编程的挑战硬件资源: 带宽上传\下载速度、硬盘读写速度、cpu处理速度软件资源: 数据库连接数、socket连接数、进程与线程的区别进程是系统进行分配和管理资源的基本单位线程:进程的一个执行单元,是进程内调度的实例,是cpu调...原创 2019-05-23 22:15:04 · 83 阅读 · 0 评论 -
线程间通信
线程间通信wait、notify、notifyAll何时使用:在多线程环境下,有时候一个线程的执行,依赖于另外一个线程的某种状态的改变,这个时候就可以使用wait、notify、notifyAllwait和sleep的区别:wait会释放持有的锁,而sleep不会,sleep只是让线程在指定的时间内,不去抢占cpu的资源wait、notify必须放在同步代码块中,且必须拥有...原创 2019-06-13 15:18:14 · 201 阅读 · 0 评论 -
原子类
原子类:可以认为其操作都是不可分割的。为什么要有原子类:对多线程访问同一个变量,我们需要加锁,而锁时比较耗性能的,jdk1.5之后新增的原子操作类提供了一种简单、性能高效、线程安全的更新一个变量的方式,这些类同样位于JUC包下的atomic包下,发展到jdk1.8,该包下一共有17个类,囊括了原子更新基本类型,原子更新数组,原子更新属性,原子更新引用。原子更新基本类型:发展...原创 2019-06-13 20:23:18 · 347 阅读 · 0 评论 -
并发容器与并发工具类的使用
同步容器Vector,HashTable – jdk提供的同步容器类Collections.synchronizedXXX 本质是对响应的容器进行包装同步容器类的缺点在单独使用里面的方法的时候,可以保证线程安全,但是符合操作需要额外加锁来保证线程安全,使用Interator迭代容器或使用for–each遍历容器,在迭代过程中修改容器会抛出CurrentModificationE...原创 2019-06-15 15:42:57 · 204 阅读 · 0 评论 -
并发编程基础2
线程安全:当多个线程访问某个类,不管运行环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就成这个类为线程安全带的。线程不安全: 多线程并发访问时得不到预期的结果。获取一个java代码的字节码javac -encoding UTF-8 UnSafeThreadDemo.java #以指定的字节码便以一个原文...原创 2019-06-11 14:47:33 · 121 阅读 · 0 评论 -
线程池的原理,使用方法及运行机制
为什么需要线程池当程序需要访问Web服务器,数据库服务器等远程资源时,单词请求的处理时间都很短吗,如果为每个请求都创建一个新的线程,则会频繁的创建和销毁线程,这个过程带来的系统开销是巨大的。线程池为线程生命周期开销问题和资源不足问题提供了解决方案,通过让多个任务重用线程,线程创建的开销被分摊到多个任务上。其好处是,因为请求到达时线程已经存在,带来了线程创建时的延迟,可以立即为请求服务,是应...原创 2019-06-17 20:41:36 · 1093 阅读 · 0 评论 -
Java内存模型与指令重排序
java中的内存模型java内存间的交互操作lock(锁定):作用于主内存的变量,把一个变量标记为一条线程独占状态unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的线程可以被别的线程锁定read(读取):作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load操作使用load(载入):作用于工作内存的变量,把read...原创 2019-06-18 16:15:46 · 155 阅读 · 0 评论 -
并发编程的基础类
volatile: 在java的内存模型中,每个线程都有自己的工作内存,同时还有一个共享的主内存,在多个线程中如果需要读取同一个变量的值的时候,它们都会去主内存里面将该变量的值加载到自己的工作内存中,然后才可以使用那个值,这样可以提高代码的执行效率,但是各个线程在修改该变量的值的时候,因为只修改自己工作内存中的数据,而别的线程不知道修改后的结果,导致程序执行的结果与预期的结果不一致,这...原创 2019-08-27 10:15:23 · 113 阅读 · 0 评论