你真的了解多线程以及线程安全?

1、首先说多线程1.1 、说到线程,必然会说到进程和线程。那么进程和线程有什么关系呢?1/进程是资源调度的最小单位。2/线程是程序运行的最小单位。从内存虚拟机层面来讲如下:1.2 、线程的并行和并发又是什么呢?1/线程的并行、Thread 总数 N <= CPU * 核数 时候,线程是并行的。2/线程的并发 、Thread 总数 N > CPU ...
摘要由CSDN通过智能技术生成
1、首先说多线程

1.1 、说到线程,必然会说到进程和线程。那么进程和线程有什么关系呢?

1/进程是资源调度的最小单位。
2/线程是程序运行的最小单位。
从内存虚拟机层面来讲如下:
可以参考下面一篇博客,这个是内存地址空间看进程和线程的区别,赶时间可以跳过这部分。
https://www.cnblogs.com/xzzzh/p/6596982.html

2

1.2 、线程的并行和并发又是什么呢?

1/线程的并行、Thread 总数 N <= CPU * 核数 时候,线程是并行的。
2/线程的并发 、Thread 总数 N > CPU * 核数 时候,线程是并发的。

多线程的4种实现方式,这个,一般只知道extends Thread 和implements Runnable 这两种。
还有两种是implements Callable 并创建FutureTask 对象来实现;
另一种就是Executors线程池来实现线程的创建(newFixedThreadPool固定线程池大小和newCachedThreadPool缓存线程池)。

为了减少篇幅,代码示例分享在github 上:
https://github.com/medoo-Ai/demo02-13

2、线程安全以及各种锁

什么是线程安全的?为毛说是线程安全的?只是因为加了锁么,不会这么浅显吧。
线程安全:要从单例和全局共享变量来说线程安全;
只有单例模式下共享全局变量的时候才会有线程不安全的问题,在单例模式的的类中,没有共享全局变量的话,该单例类是线程安全的。

切记: 并不是说因为 加了synchronized 隐式锁 就说线程是安全的,加锁是为了保证线程安全。

2.1、隐式锁:synchronized ,从锁对象的角度来分析synchronized 使用情况。

1、 同一个锁对象的下的 synchronized 区域是互斥的。 这一句不是很理解什么意思。
2、锁方法,锁的对象是this ,就是当前对象。
3、锁代码块, 效率高于 锁方法,其锁对象 可以指定。

public synchronized void updateMessage(Message msg){
   //共享数据操作
}
public  void updateMessage(Message msg){
    synchronized(this) {
    //共享数据操作
    }
}

2.2、 显式锁 Lock 和UnLock 是java.util.concurrent.lock下的

public void updateMessage(Message msg){
    Lock lock = new ReentrantLock();
    lock.lock();//加锁
    try {
    //共享数据操作
    } finally {
    //释放锁,一定要释放
        lock.unlock();
    }
}

显式锁和隐式锁有什么区别呢?
1、显式锁lock 更加灵活,但在 性能上如果都是 锁定一个对象的话 lock和synchronized 并无什么区别。
其他的
2、隐式锁synchronized 锁对象 , 显式锁并不是。

3、多线程必说的java.util.concurrent包

该包下面 分为4 个部分 :

1/ Automic Operation 原子性的操作,什么是原子性呢? 就是不能够再分的,不需要添加 synchronized 来保证线程是安全的 操作,这样能够提升效率。(原子性是JVM 内存模型中的概念 ,核心就是同生共死要么都成功,要么都失败) ;
JVM 内存模型 的原子性,有序性,可见性 参考下面的文章。
https://www.jianshu.com/p/cf57726e77f2
原子性变量操作read,load,use,assign,store,write,可以大致认为基本数据类型的访问读写具备原子性(例外就是long和double的非原子性协定)

2/ 线程队列
3/
4/

、、 未完待续

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值