![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
concurrent
CodeBoy1024
这个作者很懒,什么都没留下…
展开
-
线程上下文切换
线程调度与切换是有成本的,当有大量线程运行时操作系统进行调度,为每个线程分配一段时间,每个线程时间段结束后,再让另一个线程运行,一个线程切换出去后操作系统需要保存该线程的上下文状态,上下文状态包括CPU寄存器值,程序计数器值等,而一个线程切换回来后操作系统需要恢复线程上下文---这整个过程叫做线程上下文切换。在高并发编程时需要注意,线程上下文切换需要较大的运行成本。 ...原创 2019-03-27 09:50:46 · 434 阅读 · 0 评论 -
线程中断
线程中断 线程取消的场景 运行在死循环里的线程优雅的取消(停止) 进行一些操作时不希望继续进行 限定时间内得到结果,得不到退出 多个线程执行同一操作,若只有一个成功则其他的退出 取消关闭注意事项 停止一个线程主要通过线程中断,中断未必停止线程,它只是给线程传递一个信号,具体处理由线程决定。 线程中断相关的方法 public static boolean interrupted()...原创 2019-03-27 16:14:50 · 98 阅读 · 0 评论 -
线程协作wait/notify实现集合点
public class AssemblePointDemo { public static void main(String[] args) { int num=10; AssemblePoint point=new AssemblePoint(num); AssembleThred[]threads=new AssembleThred[num]; for(int i=0;...原创 2019-03-27 15:52:38 · 98 阅读 · 0 评论 -
线程协作场景
生产者/消费者模式 同时进行 集合点 异步结果原创 2019-03-27 15:46:51 · 117 阅读 · 0 评论 -
Synchronized总结
尝试获取对象锁,若能够获得锁则继续下一步,否则线程进入阻塞队列 执行synchronized保护的代码块 释放锁(若需要重入则进行相应操作。详细请看本人博客《理解Synchronized(4)》) 对实例方法synchronized保护的是this,对类方法保护的是class对象 synchronized类方法和实例方法保护的对象不同,不同线程可同时访问synchronized类方法和实例...原创 2019-03-27 10:56:00 · 100 阅读 · 0 评论 -
理解Synchronized(4)
可重入性---一个线程获得某个对象锁以后要是想执行需要同样锁的代码时,可直接执行。synchronized具有可重入性特点。可重入性通过记录锁的持有线程数量来实现,当执行synchronized保护的操作时先判断对象锁是否被线程所得,若是再判断锁获得线程是否当前对象,若是则增加持有数量,若不是则进入阻塞队列。当线程释放锁时持有数量减小,等持有数量为0时才释放整个锁。 内存可见性--synchro...原创 2019-03-27 10:41:04 · 97 阅读 · 0 评论 -
理解Synchronized(3)
Synchronized修饰代码块 public class SynchronizedClass { static class Child extends Thread{ public void run() { for(int i=0;i<100;++i) { //synchronized修饰代码块 synchronized(Counter.clas...原创 2019-03-27 10:24:40 · 94 阅读 · 0 评论 -
理解Synchronized(2)
Synchronized修饰类方法 public class SynchronizedClass { static class Child extends Thread{ public void run() { for(int i=0;i<100;++i) { //调用synchronized修饰的类方法 Counter.classincr(); ...原创 2019-03-27 10:20:06 · 94 阅读 · 0 评论 -
理解synchronized(1)
Synchronized用法及基本原理 Synchronized能够修饰实例方法,类方法和代码块。注:sychronized不能修饰类以及类字段 Synchronized修饰实例方法 public class SynchronizedClass { static class Child extends Thread{ Counter counter; Child(Counte...原创 2019-03-27 10:10:14 · 126 阅读 · 0 评论 -
高并发三个基本原则
原子性--没有复合操作,要么全被执行,要么全不执行,不可中断。 内存可见性---需要考虑CPU缓存,JVM内存模型。 有序性---代码的运行顺序不一定跟编辑顺序一样。在Java中JVM会做一些优化调整没有数据依赖的操作的执行顺序,单线程中没有任何问题,但在高并发环境将会出现问题 ...原创 2019-03-27 09:57:25 · 1073 阅读 · 0 评论 -
原子变量
Java并发包原子变量 java.util.concurrent.AtomicInteger ...............................AtomicBollean ..............................AtomicLong 所有原子变量实现原理是利用CAS算法和Unsafe类(应用程序不需要也不应该考虑它)来实现在死循环里实现非阻塞是不断尝试直到成功...原创 2019-04-01 22:35:28 · 356 阅读 · 0 评论