高并发

  1. 引入:StringBuffer与StringBuider区别
    前者是多线程安全的,后者是非多线程安全的,但是效率更高。
  2. 进程与线程
    进程:一个独立的程序执行过程。
    线程:建立在进程的基础之上,一个进程由一个或者多个线程组成。

        DeathThead test01 = new DeathThead();
        DeathThead test02 = new DeathThead();
        new Thread(test01::m1).start();
        new Thread(test02::m2).start();

  1. 多线程优势与弊端
    优势:并发执行,速度快。
    劣势:需要控制变量操作为原子操作,否则会出现不同步。
  2. 锁:synchronize
    互斥锁,锁定对象(或this),只有拿到锁,才能进行操作。
    支持同步执行,同一线程的同一类可以拿多次,子类可以调用父类同步方法。
    Object a = new Object();
    Object b = new Object();
    public void m1(){
        synchronized (a) {
            System.out.println("m1锁a");
        }
        try {
            Thread.sleep(3000);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        synchronized (b){
            System.out.println("m1锁b");
        }

    }
  public synchronized void m2(){
  }

synchronized线程出现异常默认会释放锁。
如果不想释放锁,需要添加trycatch方法。
如果在锁定过程中对象被重新创建,锁会被释放。

死锁
线程1需要先锁定A后锁定B,线程2需要先锁定B后锁定A。
线程1锁定了A,线程2锁定了B。
导致两个线程无法解锁,故称为死锁。

  1. volatile
    线程之间的内存缓冲区彼此可见。
    某一线程的cpu缓冲区读主内存数据->修改当前缓冲区数据->
    修改主内存数据----------->通知其他线程cpu更新缓冲区内容。
替代方案:
1.使用synchronize
优点:同时保证可见性与原子性,
缺点:过于笨重,影响效率。
2.使用sleep
优点:简单,
缺点:不可靠
  1. 原子类与原子方法
Atomic...

incrementAndGet()
#相当于++
#效率高于synchronize,但方法有限。
#多个原子方法一起不一定具有原子性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值