文章目录

  • 初识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相关推荐

  1. Java并发编程(JUC)

    目录 前言 一.Java并发编程(JUC)是什么? 二.Java创建多线程的4种方式 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 4.线程池 三.sychorn ...

  2. java并发编程学习juc工具类之Executors

    文章目录 Executors 重要方法 1.newCachedThreadPool 2.newFixedThreadPool 3.newScheduledThreadPool 示例代码 4.newSi ...

  3. JUC里面的相关分类|| java并发编程中,关于锁的实现方式有两种synchronized ,Lock || Lock——ReentrantLock||AQS(抽象队列同步器)

    JUC分类 java并发编程中,关于锁的实现方式有两种synchronized ,Lock AQS--AbstractQueuedSynchronizer

  4. java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍

    转载自  java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍 这一节我们来接着介绍JUC集合:CopyOnWrite ...

  5. 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程

    许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的 ...

  6. Java 并发编程-不懂原理多吃亏(送书福利)

    作者 | 加多 关注阿里巴巴云原生公众号,后台回复关键字"并发",即可参与送书抽奖! ** 导读:并发编程与 Java 中其他知识点相比较而言学习门槛较高,从而导致很多人望而却步. ...

  7. java并发编程实践_Java并发编程实践如何正确使用Unsafe

    一.前言 Java 并发编程实践中的话: 编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各 ...

  8. Java并发编程—常见面试题

    建议: 学习java并发前需要先掌握JVM知识 关于下面问题档案的详细解析都在后面推荐的相关系列文章中 一.线程安全相关 1.什么叫线程安全? 线程安全就是说多线程访问同一代码,不会产生不确定的结果. ...

  9. Java并发编程—AQS原理分析

    目录 一.AQS原理简述 二.自定义独占锁及共享锁 三.锁的可重入性 四.锁的公平性 五.惊群效应 AQS全称AbstractQueuedSynchronizer,它是实现 JCU包中几乎所有的锁.多 ...

最新文章

  1. mysql服务重启后不见了_一次诡异的Mysql服务不断重启故障排查
  2. [前端技术]如何加深对JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解...
  3. Ookla speedtest网速测试算法实现
  4. IIs+php 最精简的环境配置
  5. hacktoberfest_我第一次参加Hacktoberfest中学到了什么
  6. 自定义ElementUI风格树形组件,详解递归组件的使用及事件数据传递,视图更新等问题
  7. iosession在linux下拒绝链接,iosession 关闭
  8. 动态列从一表的数据汇总至另外一张表中
  9. 编译出错:self-encoder.context-me_method = ME_UMH;
  10. PHP+MYSQL图书管理系统(课设)
  11. 小学教师计算机国培培训总结,小学教师国培计划研修总结
  12. 给C盘减减肥,让你电脑飞一般速度
  13. 【转】对人生的看法和感悟
  14. 爬虫抓取究竟是什么?
  15. 极米NEW Z6X和坚果G9哪个好?
  16. python控制雷电模拟器 代码修复
  17. 亚洲和欧洲的分界线是谁划分的?
  18. Pyhton之异常处理
  19. MFC加载GIF动画
  20. 美图进入沪港通、深港通名单,投资它需要了解这三个问题

热门文章

  1. 智慧环保综合解决方案 大数据打造生态治理系统平台
  2. 最大数字字符串(leetCode179)
  3. 准备工作—PPT配色篇
  4. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何查看错误代码
  5. 英文经典老歌翻译与鉴赏:Hotel California(加州旅馆)
  6. CLTWORKINGDIR”的指定目录The Specified Directory ‘D:\Program File
  7. 宝塔Nginx搭建多个WSS协议
  8. (二)拒绝服务–Smurf 攻击
  9. 酒水供应链管理难?ZETA技术助力酒水供应链数智化升级
  10. 达摩院:阿里巴巴的科技雄心