JUC(1)JUC概述与线程基础知识

1.什么是JUC

在这里插入图片描述

  • 在Java中,线程部分是一个重点,本篇文章说的JUC也是关于线程的。JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。
  • 后续,juc也就成了并发的代名词,理解意思即可。

2.进程和线程

  • 进程是正在运行的程序,是系统进行资源分配的基本单位 (一个程序:例如QQ.exe,Music.exe)

  • 线程,又称轻量级进程(Light Weight Process)。是进程中的一条执行路径,也是CPU的基本调度单位。一个进程由一个或多个线程组成,彼此间完成不同的工作,同时执行(宏观并行,微观串行),称为多线程。(例如:迅雷是一个进程,当中的多个下载任务即是多个线程。)

  • 进程和线程的区别:

    • 进程是操作系统资源分配的基本单位,而线程是CPU的基本调度单位
    • 一个程序运行后至少有一个进程。
    • 一个进程可以包含多个线程,但是至少需要有一个线程,否则这个进程是没有意义。
    • 进程间不能共享数据段地址,但同进程的线程之间可以。
  • java默认有几个线程?2个线程! main线程、GC线程

  • 对于Java而言:我们之前使用Thread、Runnable、Callable这三种方式来开启线程的

  • 提问?JAVA真的可以开启线程吗? 开不了的!(来看一下 Thread().start()的源码)

    public synchronized void start() {
        /**
         * This method is not invoked for the main method thread or "system"
         * group threads created/set up by the VM. Any new functionality added
         * to this method in the future may have to also be added to the VM.
         *
         * A zero status value corresponds to state "NEW".
         */
        if (threadStatus != 0)
            throw new IllegalThreadStateException();

        /* Notify the group that this thread is about to be started
         * so that it can be added to the group's list of threads
         * and the group's unstarted count can be decremented. */
        group.add(this);

        boolean started = false;
        try {
            start0();
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
                /* do nothing. If start0 threw a Throwable then
                  it will be passed up the call stack */
            }
        }
    }
	//这是一个本地方法,底层的c++,在之前的jvm中提到过,Java是没有权限操作的
    private native void start0();

3.并发与并行

  • 并行:并行是针对多处理器(cpu)而言的。指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。(当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行)

  • 并发:并发描述的是多个进程同时运行的现象(多个进程抢一个cpu)。但实际上,对于单核心CPU来说,同一时刻只能运行一个进程。在单个cpu中,从宏观的角度讲:多个进程是同时进行的,但是在微观的角度来看:只是cpu快速切换不同的进程,让其执行(CPU把一个时间段划分成几个时间片段(时间区间),然后在这几个时间区间之间来回切换,由于CPU处理的速度非常快,只要时间间隔处理得当,即可让用户感觉是多个应用程序同时在进行)

  • 并发编程的本质:充分利用CPU的资源!

public class Test1 {
    public static void main(String[] args) {
        //获取cpu的核数
        System.out.println(Runtime.getRuntime().availableProcessors());
    }
}

4.线程的状态(六个)

  • 看源码
public enum State {

    	//新生
        NEW,

    	//运行
        RUNNABLE,

    	//阻塞
        BLOCKED,

    	//等待
        WAITING,

    	//超时等待
        TIMED_WAITING,

    	//终止
        TERMINATED;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悬浮海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值