自学Java第四十课
今天学习线程中的线程同步。
2.1同步代码块
锁多条语句操作共享数据
格式:synchronized(任意对象){多条语句操作共享数据代码块},任意对象为"锁"。
同步好处:解决了多线程的数据安全问题;弊端:线程很多时,每个线程都会判断同步上的锁,降低运行效率。
2.2同步方法
把synchronized关键字加到方法上,格式:修饰符 synchronized 返回值类型 方法名(参数){}
同步方法锁对象:this
同步静态方法:把synchronized关键字加到静态方法,格式:修饰符 synchronized 返回值类型 方法名(参数){}
静态锁对象:类名.class
2.3线程安全的类
StringBuffer:线程安全,可变的字符序列,被StringBuilder代替
Vector:使用ArrayList代替
Hashtable:该类实现了一个哈希表,将键映射到值,任何非null对象都可以做键和值。使用HashMap代替。
StringBuffer、Vector、Hashtable的源码使用了synchronized关键字,所以是线程安全类。
2.4Lock锁
Lock实现提供比使用synchronized()方法和语句可获得更广泛的锁定操作。
void lock():获得锁;void unlock():释放锁
lock是接口,不能直接实例化,采用类Reentrantlock实例化。