什么是线程锁
多线程可以同时执行多个任务,但是当多个线程同时访问同一个数据时,可能导致数据不同步,甚至错误!
打个比方,你在银行里面存了一百万,这个时候你需要从里面取走九十万,你女朋友也要从里面取五十万,如果没有用线程锁,那么你们两个人同时取钱,就有可能导致线程错误,你们总共从银行取走一百四十万元,那么银行就会亏本,所以要用线程锁。
synchronized和Lock的区别
线程锁分synchronized和Lock,那么他们之间有什么区别呢?
区别 | synchronized | Lock |
---|---|---|
锁的释放 | 自动释放 | 必须在finally中释放,不然可能线程锁死 |
锁的状态 | 无法判断 | 可以判断 |
存在层次 | java的关键字 | 一个类 |
性能 | 少量同步 | 多量同步 |
范围 | 不但可以锁代码块,他还可以方法 | 只有代码块 |
首先我们先不加锁写一个程序
package Thread;
public class mytest03 {
public static void main(String[] args) {
Money money=new Money(300);
new Thread(money,"t1").start();
new Thread(money,"t2").start();
}
}
class Money implements Runnable
{
int count;
public Money(int count) {
this.count = count;
}
@Override
public void run() {
while (true)
{
if(count<=0)
break;
else
{
System.out.println(Thread.currentThread().getName()+"取出了1万元,----->还剩"+(count-1)+"万元");
count=count-1;
try