什么是线程安全问题?
在单线程中不会出现线程安全问题,而在多线程编程中,有可能会出现同时访问同一个资源的情况,如:一个变量、一个对象、一个文件、一个数据库表等这样就容易出现数据错误。
解决的2种方式::
1.同步方法:synchronized 修饰的方法 ex:public synchronized void test(){}
2.同步代码块 : synchronized(被加锁的对象){ 代码 }
3.锁机制Lock
调用lock方法:加锁 {代码....} 调用unlock方法:解锁.
比较:
1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类;
2.synchronized会自动释放锁,Lock需手工释放锁(unlock()方法),否则容易造成线程死锁;
3.Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。
网友评论