1、什么是线程安全?
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
2、如何解决多线程间线程安全问题?
(1)加锁:
synchronized----自动锁:
Runnable tast01=new Runnable() { //匿名内部类
@Override
public void run() {
synchronized (arr) { //()锁资源-----共享资源作为锁资源.只要使用的是同一把锁资源就可以上锁成功。
if (arr[index] == null) { //时间到了
arr[index] = "hello";
index++;
}
}
}
lock------手动锁:
@Override
public void run() {
try {
lock.lock();//上锁
if (arr[index] == null) { //时间到了
arr[index] = "hello";
index++;
}
}finally {
lock.unlock();//解锁
}
}
3、为什么使用同步锁,就可以让多线程解决线程安全问题?
可以将一个线程理解为一个人,同步代码块为一个只有一个入口的房子。多个线程在想要进入房子的时候,cpu给入口安装了一个门,门上只有一把钥匙,这里的门和配对的钥匙就是同步监听器(锁对象了)。一个线程进入房子后,将钥匙带走,其他人没有钥匙就无法开门进入房子,只有等待那个线程从房子出来,将钥匙放回去让下拨人继续抢钥匙。抢到了才有机会进入,这里的门和钥匙就是唯一不变的。
4、什么是线程同步?
处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象。 这时候,我们就需要用到“线程同步”。 线程同步其实就是一种等待机制,多个需要同时 访问此对象的线程进入这个对象的等待池形成队列,等待前面的线程使用完毕后,下一个线 程再使用。
5、什么是同步代码块?
同步代码块指在代码块前加上 synchronized关键字的代码块。
synchronized(同步对象){
需要同步的代码;
}
6、同步代码块和同步函数之间有什么区别?
区别:(1)同步方法默认用this或者当前类class对象作为锁;同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;(2)同步方法使用关键字 synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用 synchronized(object){代码内容}进行修饰;
持续更新中,敬请期待!
参考文章:
什么是线程安全_长睡将军的博客-CSDN博客_什么是线程安全
解决多线程安全问题_A_M阿木的博客-CSDN博客_多线程安全问题怎么解决
多线程-线程安全问题的解决_一个很酷的女巫_的博客-CSDN博客_多线程问题怎么解决
为什么解决线程安全问题,多个线程要用同一个同步监听器,俗称锁_goku_liu的博客-CSDN博客
什么是线程同步_科比·布莱恩特【24】的博客-CSDN博客_什么是线程同步