JAVA并发编程
文章平均质量分 78
JAVA多线程编程,系列学习
自考的程序员
遇到自己想遇到的人,认识自己想认识的人,学习应该学习的知识
展开
-
JAVA并发编程(十三)之CAS
比较并交换,CAS操作包含三个操作数,内存位置(V)、预期原值(A)和新值(B)。 如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不做任何操作。同时CPU的一个原语操作,在intel的CPU中,使用cmpxchg指令原创 2020-12-22 16:58:02 · 142 阅读 · 1 评论 -
JAVA并发编程(十二)之synchronized
引入偏向锁是为了在无多线程竞争的情况下尽量减少不必要的轻量级锁执行路径,因为轻量级锁的获取及释放依赖多次CAS原子指令,而偏向锁只需要在置换ThreadID的时候依赖一次CAS原子指令(由于一旦出现多线程竞争的情况就必须撤销偏向锁,所以偏向锁的撤销操作的性能损耗必须小于节省下来的CAS原子指令的性能消耗)原创 2020-12-21 11:25:24 · 395 阅读 · 0 评论 -
JAVA并发编程(十一)之volatile
原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他 线程可以立即看到修改的结果。原创 2020-12-16 14:18:52 · 156 阅读 · 0 评论 -
JAVA并发编程(十)之JMM内存模型
由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存,用于存储线程私有的数据,而Java内存模型中规定所有变量(实例域、静态域和数组元素)都存储在主内存,主内存是共享内存区域,所有线程都可以访问原创 2020-12-01 10:46:59 · 419 阅读 · 0 评论 -
JAVA并发编程(九)之多线程未必快
无锁并发编程:多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据原创 2020-11-23 11:43:46 · 448 阅读 · 0 评论 -
JAVA并发编程(八)之interrupt方法
对于中断线程java 本身提供也一些API,Thread.stop, Thread.suspend, Thread.resume 。这些方法都是暴力中断线程,简单说就是没有经过被终止线程的许可,被强制终止,这样做会产生一些问题。例如:我的任务执行一半,被强制终止了,可实际上我希望该任务执行完了再中断。java设计者可能意思到这样的问题,就把他们废弃原创 2020-11-21 12:22:13 · 1110 阅读 · 0 评论 -
JAVA并发编程(七)之yield方法
线程1先执行获取锁后虽然调用了yield方法,但是由于锁被他持有,CPU资源即使被线程2获取,但由于线程1没有释放锁,所以线程2只能阻塞,释放CPU资源原创 2020-11-20 17:32:08 · 781 阅读 · 0 评论 -
JAVA并发编程(六)之sleep方法
Thread.Sleep(0) 就是通知操作系统在0毫秒内,当前线程不参与cpu分配,操作系统收到指令后立即重新计算所有线程的优先级,重新发起CPU资源分配,也许是当前线程获得CPU资源,也许是其他线程原创 2020-11-16 16:14:07 · 673 阅读 · 0 评论 -
JAVA并发编程(五)之守护线程Daemon
守护线程:是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者;如果所有用户线程都执行结束了,但是守护线程还在执行,程序依然会结束运行,同时杀死所有的守护线程。简单来说就是没有需要被守护的线程,那么守护线程就没必要存在原创 2020-11-20 13:22:25 · 193 阅读 · 0 评论 -
JAVA并发编程(四)之Thread StackSize
stackSize没有特殊的需求不需要修改,让他与平台一致就好,因为它本身的作用和范围取决于平台,在跨平台迁移时,需要检查是否需要修改这个参数;stackSize 用于精细地控制线程数和栈深度的关系,如果有些算法用递归实现,栈深度较大,可以针对性的修改。原创 2020-11-19 15:59:31 · 2022 阅读 · 0 评论 -
JAVA并发编程(三)之线程组
为线程服务,用户通过使用线程组的概念批量管理线程,如批量停止或挂起等,每个线程创建时,都会纳入线程组的树形结构原创 2020-11-19 11:43:01 · 140 阅读 · 0 评论 -
JAVA并发编程(二)之线程状态
就绪状态:thread.start(); 将线程由新建状态(New)转为就绪状态(Runnable),等待CPU的调度;运行中的线程调用yield()方法,可以使运行态转就绪态;当IO事件完成、sleep()时间结束、竞争到锁、LockSupport.unpark();线程由阻塞态进入就绪状态原创 2020-11-19 10:09:26 · 195 阅读 · 1 评论 -
JAVA并发编程(一)之线程的概念
线程:线程是操作系统能够进行运算调度的最小单位,是进程中独立运行的子任务即线程是进程中的实际运作单位;一个进程中可以并发多个线程,每条线程并行执行不同的任务。同一进程中的多条线程将共享该进程中的全部系统资源, 所以线程之间互相通信不必像进程通信那么麻烦(调用内核),直接利用共享资源就可以实现通信, 但每个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)原创 2020-11-14 16:30:24 · 221 阅读 · 0 评论