zoukankan      html  css  js  c++  java
  • JUC入门

    JUC入门

    1、什么是JUC

    • java.util工具包

    java.util.concurrent

    java.util.concurrent.atomic

    java.util.concurrentLocks

    • Runnable没有返回值--效率相对于Callable低!

    2、线程和进程

    进程、线程

    进程:一个程序 qq.exe Music.exe

    一个进程往往可以包含多个线程,至少一个!

    java默认有几个线程?两个!一个main线程,一个GC线程

    线程:开了一个进程Typora,写字,自动保存(线程负责的) Thread Runnabe Callable

    java真的可以开启线程吗? 不可以!!

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

    并发、并行

    并发编程:并发、并行

    并发:多线程操作同一个资源

    • CPU一核 模拟出来多条线程,天下武功,为快不破,快速交替

    并行:多个人一起行走

    • CPU多核,多个线程可以执行
    package juc;
    
    public class Demo01 {
        public static void main(String[] args) {
            /**
             * 获取CPU的核数
             * CPU 密集型 IO密集型
             */
            System.out.println(Runtime.getRuntime().availableProcessors//4
        }
    }
    

    并发编程的本质:充分利用CPU

    线程有几个状态 6个

    • NEW //新生
    • RUNNABLE//运行
    • BLOCKED//阻塞
    • WAITING//等待【死死的等】
    • TIMED_WAITING//超时等待【有等待截止时间】
    • TIMEINATED//截止

    wait/sleep区别

    • 来自不同的类 wait----》Object sleep-----》Thread【企业当中不用sleep】

      import java.util.concurrent.TimeUnit;//juc包下的
      //一般会用这类
      TimeUnit.SECONDS.sleep(2);//睡两秒
      TimeUnit.DAYS.sleep(1);//睡一天
      
    • 关于锁的释放

      wait 会释放锁 sleep睡觉了,抱着锁睡觉,不会释放锁

    • 使用范围不同

      wait:必须在同步代码块中【需要等人哦hhh】

      sleep:可以在任何地睡觉

    • 是否需要捕获异常

      wait:方法不需要捕获异常

      sleep:会有异常

    3、Lock锁(重点)

    传统synchronized

  • 相关阅读:
    React——from
    React——条件渲染
    React——event
    React——组件
    React——JSX
    flask_mail使用
    flask开发restful api
    mysql limit和offset用法
    flask打包安装文件
    flask-sqlalchemy使用及数据迁移
  • 原文地址:https://www.cnblogs.com/ls-summer/p/14157844.html
Copyright © 2011-2022 走看看