【JUC并发编程】JUC概述

JUC是Java并发工具包,包括concurrent、atomic和locks子包。进程是程序的集合,一个进程可有多个线程,Java默认有main和GC线程。并发和并行分别指单核和多核环境下的多任务处理。线程状态由Thread.State枚举定义,包括NEW、RUNNABLE等六种。wait()和sleep()方法在处理线程暂停上有所不同,wait()会释放锁,常用于同步代码块,而sleep()不会释放锁,更常见于TimeUnit使用。

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

一、什么是JUC

  • java.util包下面三个子包concurrent、concurrent.atomic、locks
    在这里插入图片描述

二、线程和进程

  • 进程:一个程序,是程序的集合,如:QQ.exe、Music.exe
  • 一个进程往往可以包含多个线程,至少包含一个
  • Java默认有2个线程:main线程和GC线程
  • 对于Java而言,有三种方式创建线程:Thread、Runnable、Callable
  • Java真的能开启线程吗?开启不了的!
    在这里插入图片描述

三、并发和并行

  • 并发(多线程操作同一个资源):CPU单核,模拟出来多条线程,快速交替
  • 并行(多个人一起行走):CPU多核,多个线程可以同时执行;可以使用线程池,以达到最大性能
  • Java代码获取CPU核数
    Runtime.getRuntime().availableProcessors()
    
  • 并发编程的本质:在现有的基础上,充分利用CPU的资源!

四、线程状态

  • Thread.State枚举类中定义了线程的6种状态
    public enum State {
            // 新建or新生
            NEW,
    
            // 运行
            RUNNABLE,
    
            // 阻塞
            BLOCKED,
    
            // 等待(死死的等)
            WAITING,
    
            // 超时等待(过期不候)
            TIMED_WAITING,
    
            // 终止
            TERMINATED;
        }
    

五、wait()方法和sleep()方法区别

  • 来自不同的类
    ① wait()方法来自于Object类
    ② sleep()方法来自于Thread类
    ③ 企业开发中,一般不使用sleep()方法,而更多的会使用TimeUnit.SECONDS.sleep(long timeout)方法来休眠线程
  • 关于锁的释放
    ① wait()方法会释放锁
    ② sleep()方法不会释放锁(抱着锁睡觉!)
  • 使用范围不同
    ① wait()方法必须使用在同步代码块中
    ② sleep()方法可以在程序的任何地方使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值