什么是JUC?面试高频问点

1.什么是JUC
java.util.concurrent 也就是java工具类,在并发编程中用到
2.
业务:

普通的线程代码Thread,在企业中不会用到
Runnable: 没有返回值,效率相比于Callable相对较低!
所以企业中用的多的还是Callable中的锁
Lock:
在这里插入图片描述2.线程和进程
进程:一个程序,QQ.exe Music.exe 程序的集合
在这里插入图片描述一个进程往往可以包含多个线程,至少包含一个!

Java默认线程有几个线程?Main,GC.

线程:开了一个进程Typora,写字,写完后会自动保存(就是线程负责的)

Thread Runnable,Callable

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

在这里插入图片描述从源码角度分析:

public synchronized void start() {if (threadStatus != 0)throw new IllegalThreadStateException();

​    group.add(this);boolean started = false;try {start0();
​        started = true;} finally {try {if (!started) {
​                group.threadStartFailed(this);}} catch (Throwable ignore) {
​          
​        }}
}
//本地方法,底层的C++ java无法操作硬件
private native void start0();

3.并发和并行
并发编程:并行,并发

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

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

并行(多个人一起走)

  • CPU多核(多个线程同时执行):线程池
  • 在这里插入图片描述8核:cmd窗口输入systeminfo

可以通过代码查看

package com.qiu;

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

在这里插入图片描述
并发编程的本质:充分利用Cpu的资源

4.线程有几个状态:
源码分析:

public enum State {
    /**

   * Thread state for a thread which has not yet started.
     /
         NEW,新生


​    RUNNABLE,运行


​    BLOCKED,阻塞


​    WAITING,等待死死地等


​    TIMED_WAITING,超时等待,有限定一个时间


​    TERMINATED;终止
}


5.wait/sleep的区别

1.来自不同的类

wait->Object

sleep->Thread

企业当中,休眠 -->TimeUnit.DAYS.sleep(1);
在这里插入图片描述##### 2.关于锁的释放

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

​ sleep方法调用之后,并没有释放锁。使得线程仍然可以同步控制。sleep不会让出系统资源;

而wait是进入线程等待池中等待,让出系统资源。

**我的理解:**wait释放锁,就是在等待的时候,把锁解开了,也就是让出了系统的资源.而sleep是在睡眠的时候不解开锁,不让出系统资源.进而别的程序也拿不到sleep所拥有的系统资源

3.使用的范围是不同的

wait:必须在同步代码块中,(等的时候有一个等的对象)

sleep:可以在任何地方睡

4.是否需要捕获异常

wait 不需要捕获异常

sleep需要捕获异常(可能会发生超时等待)
在这里插入图片描述

原创文章 32 获赞 52 访问量 647

猜你喜欢

转载自blog.csdn.net/qq_42400763/article/details/105797187