0
点赞
收藏
分享

微信扫一扫

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


文章目录

  • ​​1.什么是JUC​​
  • ​​2.进程和线程​​
  • ​​3.并发与并行​​
  • ​​4.线程的状态(六个)​​
  • ​​5.wait/sleep的区别​​

1.什么是JUC

JUC(1)JUC概述与线程基础知识_捕获异常

  • 在Java中,线程部分是一个重点,本篇文章说的JUC也是关于线程的。JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。

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;
}

5.wait/sleep的区别

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

  • 对于捕获异常看一下源码(都是需要捕获异常的)中断异常

java/lang/Thread.java :
public static native void sleep(long millis) throws InterruptedException;

java/lang/Object.java:
public final void wait() throws InterruptedException {
wait(0);
}


举报

相关推荐

0 条评论