java线程基础概念

多线程的实现

继承Thread类实现多线程
Runnable()接口实现多线程

如果一个类为了实现多线程继承Thread类就会有但继承局限

Callable实现多线程

[](从JDK1.5开始追加新的开发包:java.uit.concurrent, 这个开发包主要是进行高并发编程使用的,包含很多在高并发操作会使用的类。在这个包里定义有一个新的接口Callable)

线程的同步与死锁

同步处理
synchronized处理同步问题
若果想要实现“锁“ 的功能,可以采用关键字synchronized来处理

使用synchronized关键字处理有两种模式,同步代码块,同步方法

若果使用同步代码块必须设置一个要锁定的对象,使用一般可以锁定当前对象。
synchronized锁的优化
synchronized锁的最特点是同一时刻只有一个线程能够获得对象的监视器(monitor),从而进入到同步代码快或者方法之中,即变现互斥性,这种线程的效率低,每次只能通过一个线程。

synchronized锁的优化措施,适应自旋,,锁消除,锁粗话,轻量级锁,偏向锁等等。

悲观锁:每次执行临界区域时候,当前线程获得锁第同时会阻塞其他线程获取该锁。
CAS适应一种无锁操作(乐观锁策略),即所有线程访问临界资源时候,不会出现冲突,线程不会出现阻塞停顿状态。

CAS操作过程 : 包含三个值分别为: V内存地址存放实际值,O 预期值(旧值), N更新后的新值,是一个判断V, O是否相等然后将O赋值V的过程。

Java对象头在同步过程获取对象的monitor,即获取对象的锁,是获得对象的一个标志,这个标志存放在java对象头之中。

ThreadLocal

保证变量值在个线程中是独立的。

Lock体系

Lock锁出现之前,java中主要靠synchronized 关键字实现锁的功能,JDK5以后提供了lock接口,来提供和synchronized一样的功能。虽然失去synchronized隐身的加锁解锁的便利,但是却拥有加锁和解锁的可操作性,可中断获取以及超时获取锁synchronized关键字所不剧本的同步特性。

需要注意的是synchronized 同步执行完成或者遇到异常锁会自动释放,而lock必须调用unlock()方法释放锁,因此在finally块中释放锁。

你可能感兴趣的:(javaSE)