摘要: 參考論文 http://www.cnblogs.com/dolphin0520/p/3932921.html 使用线程池有哪三个好处呢? 1.重复使用线程,减少线程创建和销毁的消耗。 2.提高响应速度。因为线程已经事先建好了,任务来了可以直接使用,减少响应的时间。 3.提高线程可管理性。线程是稀缺资 阅读全文
posted @ 2018-08-28 10:57 buptyuhanwen 阅读(130) 评论(0) 推荐(0) 编辑
摘要: Lock接口 lock是一个接口面向的是锁的使用者,比起重量级锁synchronized他提供了粒度更细的锁控制。包括锁的获取,尝试获取,释放,响应中断以及超时等等。 Lock接口提供了获取和释放锁的方法。 能够按照不同的方式获取锁: 中断获取:当线程获取锁了,这个时候被中断,就会抛出异常同时释放锁 阅读全文
posted @ 2018-08-28 10:57 buptyuhanwen 阅读(153) 评论(0) 推荐(0) 编辑
摘要: ?2.1.1 ?如何理解方法内的变量线程安全,实例变量非线程安全? 方法内变量是每个方法内部的局部变量,一定是线程安全的。 实例变量,因为不同的线程可以并发的访问这些个实例变量,所以会存在非线程安全的问题。 ?为什么int类型和string类型属性不能够作为同步监视器呢? 设想创建两个引用同时指向" 阅读全文
posted @ 2018-08-28 10:47 buptyuhanwen 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 总结: 原子包提供了四种类型的原子类。包括基本数据类型,数组,引用类型,引用类型成员变量四种。 底层使用CAS操作保证原子性,CAS就是compare and swap先比较,如果是期望的值就进行交换。CAS是通过加总线锁或者使用内存锁定在硬件层面实现的。 CAS有一些缺点:1. 单个操作能够保证原 阅读全文
posted @ 2018-08-28 10:45 buptyuhanwen 阅读(190) 评论(0) 推荐(0) 编辑
摘要: java内存模型的作用。 java内存模型定义了线程和线程和线程和主内存之间的抽象关系。每个线程有自己的内存区域,存的是从主内存复制过来的变量副本,他是一个抽象概念。 线程之间通信会通过主内存,将修改的数据刷新到主内存去,其他线程就能够获取到。 考虑到内存模型避不开指令重排序 为了提升性能,编译器和 阅读全文
posted @ 2018-08-28 10:45 buptyuhanwen 阅读(161) 评论(0) 推荐(0) 编辑
摘要: synchronized用于三个地方。 修饰普通方法,那么线程需要获取对象锁。 修饰静态方法,那么线程需要获取类锁,其实就是Class对象。类锁和对象锁之间互不干扰。 修改代码块,也要获取对象锁。 用于代码块的时候对应monitorenter指令和monitorexit指令,表示需要获取monito 阅读全文
posted @ 2018-08-28 10:44 buptyuhanwen 阅读(134) 评论(0) 推荐(0) 编辑
摘要: ThreadLocal 能够为每个线程创建变量副本,就是说多个线程可以使用同一个threadlocal作为键,然后对应自己的副本值。可以有多个threadlocal变量,也就有多个相对应的值了。 Thread源码分析,一个线程的局部变量存在哪里? 通过Thread源码可以看到,线程内部使用静态内部类 阅读全文
posted @ 2018-08-28 10:37 buptyuhanwen 阅读(280) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/dolphin0520/p/3920373.html volatile作用?volatile的实现原理是什么呢?lock前缀的效果是什么呢? volatile的作用: 1.可见性。一个线程对volatile变量进行写操作之后,其他线程都能够看到。 2.原 阅读全文
posted @ 2018-08-28 10:36 buptyuhanwen 阅读(667) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/paddix/p/5381958.html 线程的几种状态:新建状态,就绪状态,阻塞状态,运行状态,死亡状态。b几种状态之间如何转换。wait,notify,yield,sleep,join 一、线程的状态 Java中线程中状态可分为五种:New(新建状 阅读全文
posted @ 2018-08-28 10:35 buptyuhanwen 阅读(516) 评论(0) 推荐(0) 编辑
摘要: https://www.cnblogs.com/baizhanshi/p/5437933.html /** * 一个简单的死锁类 * 当DeadLock类的对象flag==1时(td1),先锁定o1,睡眠500毫秒 * 而td1在睡眠的时候另一个flag==0的对象(td2)线程启动,先锁定o2,睡 阅读全文
posted @ 2018-08-28 10:34 buptyuhanwen 阅读(402) 评论(0) 推荐(0) 编辑