synchronized?synchronized和Lock的区别
一、synchronized的本质
1、同步器的本质就是加锁
加锁目的:序列化访问临界资源,即同一时刻只能有一个线程访问临界资源(同步互斥访问)
不过当多个线程执行一个方法时,该方法内部的局部变量并不是临界资源,因为这些局部变量是在每个线程的私有栈中,因此不具有共享性,不会导致线程安全问题。
2、锁类型
隐式锁:Synchronized加锁机制是Jvm内置锁,不需要手动加锁与解锁Jvm会自动加锁跟解锁。
显式锁:Lock;例如:ReentrantLock,实现juc里的Lock接口,实现是基于AQS实现,需要手动加锁跟解锁ReentrantLocklock(),unlock();
二、synchronized与valtie区别
synchronized是单乙数连接。而valtie是双乙数连接。
三、synchronized可以让线程停止那
synchronized关键字不能直接让线程停止,它主要用于实现多个线程对共享资源的互斥访问。当一个线程进入synchronized代码块时,它会获得对象的锁,其他线程必须等待该线程释放锁后才能进入。这样可以确保在一个时间点只有一个线程执行同步代码,避免多个线程同时访问共享资源导致的数据不一致问题。要停止一个线程,通常可以使用其他方法,如设置一个标志,当标志为true时,线程执行结束返回,从而实现线程的停止。或者使用Thread类提供的stop()方法,但这种方法已经被废弃,因为它可能会导致线程不安全或资源泄漏的问题。因此,正确停止线程的做法是通过合理的设计和编码,让线程自然结束或使用interrupt()方法发送中断信号,让线程在合适的时机退出执行。