并发编程-基础

  1. 进程、线程
    进程是系统资源分配的最小单位。
    线程是cpu调度的最小单位,依附于进程;

    • 像计算机上的迅雷、微信、tomcat等,启动后,都是一个个进程,而进程里面可以有很多线程。
    • tomcat启动后,最多可以有200个线程;
    • linux系统下,一个进程最多有1024个线程;windows下,一个进程最多2000个线程。
    • 一个2G内存的cpu,执行一条指令的时间大概在0.7ns左右,而线程上下文切换的话,在70ns~0.7us之间。
  2. 电脑内核和线程数

    • 买电脑的时候内核多少说的是有个屋里cpu,比如8核,就有8个屋里cpu,一个cpu可以供一个线程使用。
    • 超线程技术:随着时代发展,现在的一个cpu可以供2个线程使用,超越了一个线程,可以有2个逻辑cpu。
    • 查询当前系统可用逻辑cpu数量:Runningtime.getRuntime.avaliableProcessors();
  3. 启动一个线程的方法
    JDK源码写了总共有2种:

    • 基础Thread类。
    • 实现Runnable接口。
      Thread类是java原生的线程;
      Runnable启动的线程是业务逻辑的封装和抽象出来的,Runnable要放到Thread类中启动一个线程;
      Thread启动:
      Thread thread = new Thread();
      thread.start();
      Runnable启动:
      Thread thread = new Thread(new Runnable());
      thread.start();
  4. 结束线程
    中断某个线程,不要使用额外的参数来设置是否中断,要采用interrupt()方法。

  • interrupt();
    当前线程调用这个方法的时候,会将当前线程设置一个中断标志位,然后用isInterrupt()来读取线程的中断标志位。
  • static的Interrupt()
    同样会设置中断标志位为true,但是调用isInterrupted()后,会再将中断标志位设为false。
  1. 线程状态
    在这里插入图片描述
    yield():
    线程调用该方法会主动放弃时间片,而处于就绪状态,会参与时间片下次的分配调度。concurrentHashMap中对某个segment扩容的时候,会调用yield方法,当多个线程来扩容的时候,保证只有一个线程去操作。
    join():
    一个线程等待另一个线程执行完毕后才继续执行的场景,可使用join方法。例如:A.join(B),只有B线程执行完毕后,A线程才会继续执行。
    阻塞状态:
    有且仅有调用Synchronized内置锁后线程才会阻塞。

  2. run()/star()区别
    run()方法可以理解为一个普通的方法,在当前线程调用,不会新启线程调用。
    start()方法会向JVM申请一个新的线程来执行run()方法里的逻辑。

  3. manamentFactory使用
    可以使用该类来监控系统、JVM、堆栈信息等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值