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 人工智能资料下载,可访问百度:尚硅谷官网