面试总结之[线程]

1:什么是线程安全问题


当多个线程共享一个全局变量做写操作的时候,可能会受到其他线程的干扰,导致数据有问题,这叫做线程安全问题;
注意:1:做读的时候不会产生线程安全;
2:如果是局部变量,也是做写的操作,是不会造成线程安全问题的;
这里写图片描述


2:线程如何实现同步

同步:多个线程共享同一个全局变量,数据安全问题——保证数据的原子性;
1:synchronized同步代码块
条件:
1:必须要有2个线程以上,需要发生同步;
2:多个线程想同步,必须用同一把锁;
3:保证只有一个线程进行执行;
原理:
1:有一个线程已经拿到了锁,其他线程已经有cpu的
执行权,一直排队,等待其他线程释放锁,
2:锁是在什么时候释放?代码执行完毕或抛出异常都会被释放掉
3:锁已经被释放掉的话,其他线程开始获取锁进行同步中去;
4:锁的资源竞争,
5:死锁的问题.锁不释放
弊端:多个线程需要判断锁,较为消耗资源,抢锁的资源


2:同步函数
在方法上面加synchronized;
1:使用的是什么锁? this锁;
2:如果一个线程使用的同步函数,另外一个线程使用的是同步代码块()只有this锁才能保证同步;
3:静态代码块:不使用this锁;当前类的字节码文件;
4:多线程死锁:同步中嵌套同步,无法释放,一致等待,变为死锁


多线程三大特性

原子性,保证线程独一无二,保证线程安全问题
可见性:java内存模型
有序性:join wait notify 多线程之间通讯


volatile关键字,AtomicInteger原子类

volatile::1场景:就是主线程修改了数据之后刷新到了主内存,而子线程的数据并没有更新;
2:主要是在线程中做了一些sleep操作等才会导致与主内存的刷新不及时;
3:缺点:就是不保证原子性,就是不保证线程安全问题
这里写图片描述

AtomicInteger: JDK1.5并发包里的 计数用的; 保证元素的原子性,保证线程安全问题;
ThreadLocal::是本地线程,为每一个线程提供一个局部变量;底层就是map,key就是当前线程对象;

java内存模型

1属于多线程可见性 jmm
2:决定了一个线程与另一个线程的是否可见.
3:主内存(主要存放共享的全局变量) 私有本地内存(本地线程私有变量)
注意:本地内存存放的是共享数据的副本;
java内存结构? 指的是jvm内存分配;栈、堆、方法区等;

这里写图片描述


这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值