JUC并发编程

知道的越多,不知道的就越多。自己哪里薄弱,害怕哪里被问到,就要去补哪里。所以又回过头来学习下JUC并发编程。跟着B站狂神学习并记录。

什么是JUC

学之前感觉这是什么高级东西呢,其实JUC就是java提供的一个并发编程的工具包java.util.concurrent
还记得线程的几种实现方式吗?(不知道的点这里)其中有一种实现Callable接口,Callable就是JUC下的一个接口。

回顾线程和进程

“进程是资源分配的最小单位,线程是CPU调度的最小单位”。一个进程往往可以包含多个线程,至少包含一个!
Java默认有2 个线程:
mian线程:是用户线程,java程序的入口,jvm必须确保用户线程执行完毕。
GC线程:是守护线程(daemon),负责jvm垃圾的回收,顾名思义守护我们程序的线程,jvm不用等待守护线程执行完毕。

java可以开启线程吗

曾经面试被问到过这个问题,其实java本质是开启不了线程的,所见的start方法并非真正的start。进入java start方法源码中可以看到,其实底层调的是native方法,要知道java是无法直接操作硬件的。

public synchronized void start() { 
 	if (threadStatus != 0) throw new IllegalThreadStateException(); 
	group.add(this);
 	boolean started = false;
    try {
   		start0(); //可以看到在这里调了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 一核 ,模拟出来多条线程,cpe调度快速交替执行
并行:(多个人一起行走)
CPU 多核 ,多个线程可以同时执行
查看cpu核数:Runtime.getRuntime().availableProcessors()

线程的生命周期(面试常问)

线程的生命周期一共分为五个部分分别是:新建,就绪,运行,阻塞以及死亡。但是在java中定义了六个状态:

public enum State { 
	// 新生 
	NEW,
	// 运行 
	RUNNABLE,
	// 阻塞 
	BLOCKED, 
	// 等待,死死地等 
	WAITING, 
	// 超时等待 
	TIMED_WAITING, 
	// 终止,死亡
	 TERMINATED; 
}

wait/sleep 区别(面试常问)

1、来自不同的类
wait 是 Object类中的方法
sleep 是 Thread 类中的方法
2、关于锁的释放
wait 会释放锁,sleep 顾名思义睡觉了,抱着锁睡觉,不会释放!
3、使用的范围是不同的
wait必须在同步代码块中调用
sleep可以再任何地方睡

下一篇:JUC-Lock锁与Synchronized

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值