logo资料库

JUC学习知识.pdf

第1页 / 共52页
第2页 / 共52页
第3页 / 共52页
第4页 / 共52页
第5页 / 共52页
第6页 / 共52页
第7页 / 共52页
第8页 / 共52页
资料共52页,剩余部分请下载后查看
JUC
尚硅谷JAVA研究院
版本:V1.1
第1章JUC简介
1.是什么
2.进程/线程回顾
第2章Lock接口
1.复习Synchronized
2.Lock
3.java8新特性
第3章Callable接口
1.是什么
2.与runnable对比
3.怎么用
第4章线程间通信
1.线程间通信
2.synchronized实现
3.java8新版实现
第5章线程间定制化调用通信
1.实现步骤
2.程序代码
第6章多线程锁
1.程序代码
2.锁的8个问题
3.锁的8个问题分析
第7章JUC强大的辅助类讲解
1.ReentrantReadWriteLock读写锁
2.CountDownLatch减少计数
3.CyclicBarrier循环栅栏
4.Semaphore信号灯
JavaEE 课程系列 ————————————————————————————————————— JUC 尚硅谷 JAVA 研究院 版本:V1.1 第 1 章JUC 简介 1. 是什么 java.util.concurrent 在并发编程中使用的工具类 2. 进程/线程回顾 2.1 进程/线程 进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本 1 更多 Java –大数据 –前端 –python 人工智能资料下载,可访问百度:尚硅谷官网
JavaEE 课程系列 ————————————————————————————————————— 单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 线程:通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程 可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为 独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会 小得多,能更高效的提高系统多个程序间并发执行的程度。 2.2 进程/线程例子 使用 QQ,查看进程一定有一个 QQ.exe 的进程,我可以用 qq 和 A 文字聊天,和 B 视频聊天,给 C 传文件,给 D 发一段语言,QQ 支持录入信息的搜索。 上学的时候写论文,用 word 写论文,同时用 QQ 音乐放音乐,同时用 QQ 聊天,多个进程。 word 如没有保存,停电关机,再通电后打开 word 可以恢复之前未保存的文档,word 也会检查你的拼写,两个 线程:容灾备份,语法检查 第 2 章Lock 接口 1. 复习 Synchronized 1.1 多线程编程模板上 (1)线程 操作 资源类 (2)高内聚低耦合 1.2 实现步骤 2 更多 Java –大数据 –前端 –python 人工智能资料下载,可访问百度:尚硅谷官网
JavaEE 课程系列 ————————————————————————————————————— (1)创建资源类 (2)资源类里创建同步方法、同步代码块 2. Lock 2.1 是什么 参考 Java8API Lock implementations provide more extensive locking operations than can be obtained using synchronized methods and statements. They allow more flexible structuring, may have quite different properties, and may support multiple associated Condition objects. Lock 实现提供更广泛的锁定操作可以比使用 synchronized 获得方法和声明更好。他们允许更灵活的结构,可以 有完全不同的特性,可以支持多个相关的 Condition 对象。 2.2 Lock 接口的实现 3 更多 Java –大数据 –前端 –python 人工智能资料下载,可访问百度:尚硅谷官网
JavaEE 课程系列 ————————————————————————————————————— ReentrantLock 可重入锁,参考 Java8API 2.3 创建线程方式 (1) 继承 Thread 例如: public class SaleTicket extends Thread Java 是单继承,资源宝贵,要用接口方式 (2) new Thread() 例如: Thread t1 = new Thread(); t1.start(); 不能这样实现 (3) Thread(Runnable target, String name) 参考 Java8API 4 更多 Java –大数据 –前端 –python 人工智能资料下载,可访问百度:尚硅谷官网
JavaEE 课程系列 ————————————————————————————————————— 2.4 实现线程方法 (1) 新建类实现 runnable 接口 class MyThread implements Runnable//新建类实现 runnable 接口 new Thread(new MyThread,...) 这种方法会新增类,有更新更好的方法 (2) 匿名内部类 new Thread(new Runnable() { 5 更多 Java –大数据 –前端 –python 人工智能资料下载,可访问百度:尚硅谷官网
JavaEE 课程系列 ————————————————————————————————————— @Override public void run() { } }, "your thread name").start(); 这种方法不需要创建新的类,可以 new 接口 (3) lambda 表达式 new Thread(() -> { }, "your thread name").start(); 这种方法代码更简洁精炼 2.5 程序代码 package com.atguigu.thread; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; class Ticket //实例例 eld +method { private int number=30; /* //1 同步 public synchronized void sale() {//2 同步 synchronized(this) {} if(number > 0) { System.out.println(Thread.currentThread().getName()+"卖出"+(number--)+"\t 还剩 number); } 6 更多 Java –大数据 –前端 –python 人工智能资料下载,可访问百度:尚硅谷官网
JavaEE 课程系列 ————————————————————————————————————— }*/ // Lock implementations provide more extensive locking operations // than can be obtained using synchronized methods and statements. private Lock lock = new ReentrantLock();//List list = new ArrayList() public void sale() { lock.lock(); try { if(number > 0) { System.out.println(Thread.currentThread().getName()+"卖出"+(number--)+"\t 还剩 number); } } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } } /** * 7 更多 Java –大数据 –前端 –python 人工智能资料下载,可访问百度:尚硅谷官网
JavaEE 课程系列 ————————————————————————————————————— * @Description:卖票程序个售票出 0 张票 @author xiale * 笔记:J 里面如何 1 多线程编-上 1.1 线程 (资里源类 * 1.2 高内聚 / public class SaleTicket { public static void main(String[] args)//main 所有程序 Ticket ticket = new Ticket(); //Thread(Runnable target, String name) Allocates a new Thread object. new Thread(() -> {for (int i = 1; i < 40; i++)ticket.sale();}, "AA").start(); new Thread(() -> {for (int i = 1; i < 40; i++)ticket.sale();}, "BB").start(); new Thread(() -> {for (int i = 1; i < 40; i++)ticket.sale();}, "CC").start(); /* new Thread(new Runnable() { @Override public void run() { } for (int i = 1; i <=40; i++) { } ticket.sale(); }, "AA").start(); 8 更多 Java –大数据 –前端 –python 人工智能资料下载,可访问百度:尚硅谷官网
分享到:
收藏