当前位置: 首页 > news >正文

什么是JUC

什么是JUC

    JUC指的是:Java里的三个包

  • java.util.concurrent
  • java.util.concurrent.atomic:原子性
  • java.util.concurrent.locks:lock锁

 

回顾线程和进程

进程

        程序执行的一次过程,一个进程包含一个或多个线程。进程是资源分配的单位

线程

        可以指程序执行过程中,负责实现某个功能的单位。线程是CPU调度和执行的单位

并发

        同一时刻,多个线程交替执行。(一个CPU交替执行线程)

并行

        同一时刻,多个线程同时执行。(多个CPU同时执行多个线程)

    查询cpu核数

public class Test1 {
    public static void main(String[] args) {
        //查询cpu核数
        //CPU 密集型,IO密集型
        System.out.println(Runtime.getRuntime().availableProcessors());
    }
}

并发编程的本质

        并发编程的本质是充分利用cpu资源。

    问题:Java真的可以开启线程吗

        不可以。Java创建Thread类调用start方法,底层是把线程放到一个组里面,然后调用一个本地方法start0;方法底层是C++;Java无法操作硬件

Thread部分源码

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++ java无法直接操作硬件
    private native void start0();

多线程回顾

线程的几种状态

        新生状态、运行状态、阻塞状态、等待状态(死等)、超时等待状态(过期不候)、停止状态

    Thread.State的源码

public enum State {
        /**
         * Thread state for a thread which has not yet started.
         */
         // 新生
        NEW,
        /**
         * Thread state for a runnable thread.  A thread in the runnable
         * state is executing in the Java virtual machine but it may
         * be waiting for other resources from the operating system
         * such as processor.
         */
         // 运行
        RUNNABLE,
        /**
         * Thread state for a thread blocked waiting for a monitor lock.
         * A thread in the blocked state is waiting for a monitor lock
         * to enter a synchronized block/method or
         * reenter a synchronized block/method after calling
         * {@link Object#wait() Object.wait}.
         */
         // 阻塞
        BLOCKED,
        /**
         * Thread state for a waiting thread.
         * A thread is in the waiting state due to calling one of the
         * following methods:
         * <ul>
         *   <li>{@link Object#wait() Object.wait} with no timeout</li>
         *   <li>{@link #join() Thread.join} with no timeout</li>
         *   <li>{@link LockSupport#park() LockSupport.park}</li>
         * </ul>
         *
         * <p>A thread in the waiting state is waiting for another thread to
         * perform a particular action.
         *
         * For example, a thread that has called <tt>Object.wait()</tt>
         * on an object is waiting for another thread to call
         * <tt>Object.notify()</tt> or <tt>Object.notifyAll()</tt> on
         * that object. A thread that has called <tt>Thread.join()</tt>
         * is waiting for a specified thread to terminate.
         */
         // 等待,死死的等待
        WAITING,
        /**
         * Thread state for a waiting thread with a specified waiting time.
         * A thread is in the timed waiting state due to calling one of
         * the following methods with a specified positive waiting time:
         * <ul>
         *   <li>{@link #sleep Thread.sleep}</li>
         *   <li>{@link Object#wait(long) Object.wait} with timeout</li>
         *   <li>{@link #join(long) Thread.join} with timeout</li>
         *   <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li>
         *   <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li>
         * </ul>
         */
         // 超时等待
        TIMED_WAITING,
        /**
         * Thread state for a terminated thread.
         * The thread has completed execution.
         */
         // 终止
        TERMINATED;
    }

sleep和wait的区别

  1. sleep是Thread类的本地方法;wait是Object类的方法。
  2. sleep不释放锁;wait释放锁。
  3. sleep可以使用在任何地方;wait必须在同步代码块中
  4. sleep不需要和synchronized关键字一起使用;wait必须和synchronized代码块一起使用。
  5. sleep不需要被唤醒(时间到了自动退出阻塞);wait需要被唤醒。
  6. sleep一般用于当前线程休眠,或者轮循暂停操作;wait则多用于多线程之间的通信。
  7. sleep和wait都需要捕获异常

相关文章:

  • 图解LeetCode——775. 全局倒置与局部倒置(难度:中等)
  • apache 组件下载地址
  • 【JavaSE】继承那些事儿
  • 【数据结构】栈基本操作的实现(C语言)
  • MySQL纯代码复习
  • akshare复权算法-港股复权后数据代码分享
  • 通俗易懂话GC-C#的内存管理
  • 使用小程序制作一个电子木鱼,功德+1
  • Android Studio App开发之实现底部标签栏BottomNavigationView和自定义标签按钮实战(附源码 超详细必看)
  • Vue/Vuex (actions) 核心概念 使用方法、辅助函数 mapActions使用方法说明
  • Flink学习:Flink支持的数据类型
  • 【论文复现】——FEC: Fast Euclidean Clustering for Point Cloud Segmentation
  • 第十三届蓝桥杯C++B组省赛 I 题——李白打酒加强版 (AC)
  • 队列的简单实现
  • java毕业设计家庭理财记账系统(附源码、数据库)
  • 【ASM】字节码操作 工具类与常用类 asm-utils 与 asm-commons
  • 用Python把附近的足浴店都给采集了一遍,好兄弟:针不戳~
  • 计算机毕业设计之java+javaweb的医院门诊挂号系统
  • 【Linux】基本指令(一)
  • 刷题记录 -- 面试题
  • 西部航空回应飞机上卖彩票:与重庆福彩合作,仅部分航班售卖
  • 家政阿姨如何炼成全国劳模?做饭、收纳、养老、外语样样都会
  • 美国务院宣布新一轮与伊朗相关的制裁
  • 《求是》杂志发表习近平总书记重要文章《激励新时代青年在中国式现代化建设中挺膺担当》
  • 西藏阿里地区日土县连发两次地震,分别为4.8级和3.8级
  • 商务部新闻发言人就波音公司飞回拟交付飞机答记者问