线程—synchronized、volatile

本文深入探讨了线程的概念及生命周期,详细解释了synchronized关键字如何实现代码同步,防止多线程环境下数据竞争的发生,并介绍了volatile关键字的作用及其使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 线程 : 是操作系统能够进行运算调度的最小单位。它 被包含在进程之中,是进程中的实际运作单位。
    一 条线 程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行
    不同 的任务。

    1. 线程的声明周期
      新建(New)->就绪(Runnable)->运行(Running)->阻塞(Block)->死亡(Dead)
      3.synchronized当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行
      该段代码。
      synchronized锁的使用方法
      注意加锁会降低效率,所有存在一个加锁层级的问题:
      1.代码锁,对代码级进行加锁
      2.方法锁,对方法进行加锁
      3.对象锁,对对象的所有资源进行加锁
      synchronized后传的参数是加锁对象,就是说锁与这个对象绑定,
      锁并不单独存在,一个对象只能绑定一个锁
      for (int i = 0; i < 100; i++) {
      new Thread(new Runnable() {
      @Override
      public void run() {
      synchronized(对象){需要加锁的代码}
      synchronized (this) {
      count = count + 1;
      }

      }
      }).start();

  2. volatile
    1、volatile关键字为域变量的访问提供了一种免锁机制
    2、使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新
    3、因此每次使用该域就要重新计算,而不是使用寄存器中的值
    4、volatile不会提供任何原子操作,它也不能用来修饰final类型的变量
    volatile static int count = 0;
    for (int i = 0; i < 100; i++) {
    new Thread(new Runnable() {
    public void run() {
    count++;
    }
    }).start();
    先让线程休眠一秒钟
    try {
    Thread.sleep(1 * 1000);
    } catch (Exception e) {
    e.printStackTrace();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值