Java并发编程——初识JUC
文章目录
- 初识JUC
- 一、什么是JUC
- 二、进程和线程
- 2.1 进程和线程
- 2.2 并行和并发
- 2.3 Java线程有几个状态
- 2.4 wait/sleep的区别
初识JUC
一、什么是JUC
JUC是java.util .concurrent
包的简称,这是一个处理线程的工具包。
二、进程和线程
2.1 进程和线程
- 进程:一个进程,qq.exe之类的程序的集合,一个进程往往可以包含很多个线程,至少包含一个
- 线程:操作系统能够进行运算调度的最小单位
Java默认有两个线程,main和GC这两个线程
Java真的可以开启线程么?
Java本身没权权限开启线程,通过start()的源码可知,调用了本地方法,即调用了底层的C++
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 thenit will be passed up the call stack */}}}//native为本地方法,调用底层的C++,Java运行在虚拟机上,无法调用硬件private native void start0();
2.2 并行和并发
- 并发(多个线程同时操作同一个资源)
如果CPU只有一核,一次只能处理一条指令,通过快速切换虚拟出多条线程实现并发。 - 并行(多个人一起行走): 并行提高效率,采用线程池
CPU多核,多个线程可以同时执行 - 如何获取系统CPU的核数:
public class Test1 {public static void main(String[] args) {//获取cpu核数//CPU密集型,IO密集型System.out.println(Runtime.getRuntime().availableProcessors());}
}
并发编程的本质:充分利用CPU的资源
为什么要并发编程:CPU/内存/IO设备的速度有极大差异,为了合理利用CPU的高性能,操作系统增加了进程/线程.
2.3 Java线程有几个状态
通过源码可以知道线程有六个状态
Thread.State.NEW;
public enum State {/*** Thread state for a thread which has not yet started.*/NEW, //线程新生RUNNABLE, //线程运行BLOCKED, //线程阻塞WAITING, //等待,死死的等待TIMED_WAITING, //超时等待TERMINATED; //终止
}
2.4 wait/sleep的区别
- 来自不同的类
wait ==> Object
sleep ==> Thread - 关于锁的释放
wait会释放锁,sleep睡着了,抱着锁睡觉,不会释放锁 - 使用的范围不同
wait:必须在同步代码块中使用,必须又可以等待的对象
sleep:任何时候都可以睡 - 是否需要捕获异常
wait 不需要捕获异常;
sleep需要捕获异常InterruptedException(属于checked exception:指的是编译时异常),进程在休眠的过程中不可被打断,被打断则抛出异常。
public static void main(String[] args){Thread a = new Thread(){@Overridepublic void run(){try {System.out.println("正在执行线程");Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();System.out.println("休眠的进程被打断");}}};a.start();a.interrupt();}
正在执行线程
休眠的进程被打断
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at gdut.hzh.demo01.Test1$1.run(Test1.java:17)
Java并发编程——初识JUC相关推荐
- Java并发编程(JUC)
目录 前言 一.Java并发编程(JUC)是什么? 二.Java创建多线程的4种方式 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 4.线程池 三.sychorn ...
- java并发编程学习juc工具类之Executors
文章目录 Executors 重要方法 1.newCachedThreadPool 2.newFixedThreadPool 3.newScheduledThreadPool 示例代码 4.newSi ...
- JUC里面的相关分类|| java并发编程中,关于锁的实现方式有两种synchronized ,Lock || Lock——ReentrantLock||AQS(抽象队列同步器)
JUC分类 java并发编程中,关于锁的实现方式有两种synchronized ,Lock AQS--AbstractQueuedSynchronizer
- java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍
转载自 java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍 这一节我们来接着介绍JUC集合:CopyOnWrite ...
- 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程
许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的 ...
- Java 并发编程-不懂原理多吃亏(送书福利)
作者 | 加多 关注阿里巴巴云原生公众号,后台回复关键字"并发",即可参与送书抽奖! ** 导读:并发编程与 Java 中其他知识点相比较而言学习门槛较高,从而导致很多人望而却步. ...
- java并发编程实践_Java并发编程实践如何正确使用Unsafe
一.前言 Java 并发编程实践中的话: 编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各 ...
- Java并发编程—常见面试题
建议: 学习java并发前需要先掌握JVM知识 关于下面问题档案的详细解析都在后面推荐的相关系列文章中 一.线程安全相关 1.什么叫线程安全? 线程安全就是说多线程访问同一代码,不会产生不确定的结果. ...
- Java并发编程—AQS原理分析
目录 一.AQS原理简述 二.自定义独占锁及共享锁 三.锁的可重入性 四.锁的公平性 五.惊群效应 AQS全称AbstractQueuedSynchronizer,它是实现 JCU包中几乎所有的锁.多 ...
最新文章
- mysql服务重启后不见了_一次诡异的Mysql服务不断重启故障排查
- [前端技术]如何加深对JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解...
- Ookla speedtest网速测试算法实现
- IIs+php 最精简的环境配置
- hacktoberfest_我第一次参加Hacktoberfest中学到了什么
- 自定义ElementUI风格树形组件,详解递归组件的使用及事件数据传递,视图更新等问题
- iosession在linux下拒绝链接,iosession 关闭
- 动态列从一表的数据汇总至另外一张表中
- 编译出错:self-encoder.context-me_method = ME_UMH;
- PHP+MYSQL图书管理系统(课设)
- 小学教师计算机国培培训总结,小学教师国培计划研修总结
- 给C盘减减肥,让你电脑飞一般速度
- 【转】对人生的看法和感悟
- 爬虫抓取究竟是什么?
- 极米NEW Z6X和坚果G9哪个好?
- python控制雷电模拟器 代码修复
- 亚洲和欧洲的分界线是谁划分的?
- Pyhton之异常处理
- MFC加载GIF动画
- 美图进入沪港通、深港通名单,投资它需要了解这三个问题
热门文章
- 智慧环保综合解决方案 大数据打造生态治理系统平台
- 最大数字字符串(leetCode179)
- 准备工作—PPT配色篇
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何查看错误代码
- 英文经典老歌翻译与鉴赏:Hotel California(加州旅馆)
- CLTWORKINGDIR”的指定目录The Specified Directory ‘D:\Program File
- 宝塔Nginx搭建多个WSS协议
- (二)拒绝服务–Smurf 攻击
- 酒水供应链管理难?ZETA技术助力酒水供应链数智化升级
- 达摩院:阿里巴巴的科技雄心