位掩码-劝你放下遮掩,好好做X

本文详细介绍了位掩码在计算机科学中的应用,涉及其原理、优势(尤其是速度快和多状态表示),并展示了如何通过位操作实现状态的获取、添加和删除。实例涵盖了线程池中ThreadPoolExecutor的状态管理。
摘要由CSDN通过智能技术生成

一.这个遮遮掩掩的家伙是谁

首先强行解释一波啥是位掩码:

  1. 位表示二进制的值,一位1表示一个状态值.
  2. 掩码是与目标数值进行位操作的二进制值.
    简单理解就是有多种状态的二进制值

二. 遮掩的用处

肯定不是装X用的,主要是有两点:

  1. 快,计算机采用二进制,位操作快
  2. 需要多个布尔值的场景,例如权限

三. 掩码和指定值的操作

假设mask为掩码,A为指定状态,主要包含位操作如下,

   		  // 获取A状态
          mask & A;
          // 添加A状态
          mask | A;
          // 删除A状态
          mask & (~A);

四. 源码中使用

位掩码虽然拥有特殊的优势,但是在实际项目中很少直接使用,毕竟二进制对开发者不够友好,
主要还是一些源码会使用到,例如线程池ThreadPoolExecutor

    // 高位表示状态,低位表示线程数
    private static final int RUNNING    = -1 << COUNT_BITS;
    private static final int SHUTDOWN   =  0 << COUNT_BITS;
    private static final int STOP       =  1 << COUNT_BITS;
    private static final int TIDYING    =  2 << COUNT_BITS;
    private static final int TERMINATED =  3 << COUNT_BITS;
	
	// 重置状态
    private static int runStateOf(int c)     { return c & ~CAPACITY; }
    // 获取当前线程数
    private static int workerCountOf(int c)  { return c & CAPACITY; }
    private static int ctlOf(int rs, int wc) { return rs | wc; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值