From a8b0ba255d8aec4c01fce7bf2b1e80ef918f06b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B3=95=E7=84=B6?= Date: Mon, 19 Dec 2022 16:45:33 +0800 Subject: [PATCH] =?UTF-8?q?java=20=E5=A4=9A=E7=BA=BF=E7=A8=8B=E5=B9=B6?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Java基础教程/JavaIO与网络编程/02 Java NIO.md | 4 +- .../Java实用技巧/01 Java模板变量替换.md | 61 + Java基础教程/Java并发编程/01 Java并发实现.md | 413 +++++ Java基础教程/Java并发编程/02 Java互斥同步.md | 445 +++++ Java基础教程/Java并发编程/03 Java进程通信.md | 166 ++ Java基础教程/Java并发编程/04 Java线程池.md | 448 +++++ Java基础教程/Java并发编程/05 JUC并发组件.md | 286 +++ Java基础教程/Java并发编程/06 Java线程安全.md | 365 ++++ Java基础教程/Java并发编程/07 Java内存模型.md | 211 +++ Java基础教程/Java并发编程/08 Java锁优化.md | 113 ++ Java基础教程/Java并发编程/Java 并发.md | 1636 ----------------- .../Java并发编程/image/2022-12-16-16-18-55.png | Bin 0 -> 41575 bytes .../Java并发编程/image/2022-12-16-18-02-06.png | Bin 0 -> 40446 bytes .../Java并发编程/image/2022-12-16-19-59-39.png | Bin 0 -> 43296 bytes .../Java并发编程/image/2022-12-16-19-59-48.png | Bin 0 -> 28814 bytes .../Java并发编程/image/2022-12-16-20-01-57.png | Bin 0 -> 21608 bytes .../Java并发编程/image/2022-12-16-20-02-05.png | Bin 0 -> 27063 bytes .../Java并发编程/image/2022-12-16-20-02-13.png | Bin 0 -> 28755 bytes .../Java并发编程/image/2022-12-16-20-02-23.png | Bin 0 -> 31028 bytes .../Java并发编程/image/2022-12-16-20-02-33.png | Bin 0 -> 32452 bytes .../Java并发编程/image/2022-12-16-20-24-02.png | Bin 0 -> 39445 bytes .../Java并发编程/image/2022-12-16-20-24-06.png | Bin 0 -> 39445 bytes .../Java并发编程/image/2022-12-16-20-24-10.png | Bin 0 -> 39445 bytes .../Java并发编程/image/2022-12-16-20-24-15.png | Bin 0 -> 39445 bytes .../Java并发编程/image/2022-12-16-20-53-47.png | Bin 0 -> 22486 bytes .../Java并发编程/image/2022-12-19-11-10-40.png | Bin 0 -> 31218 bytes .../Java并发编程/image/2022-12-19-14-45-38.png | Bin 0 -> 36768 bytes .../Java并发编程/image/2022-12-19-14-45-52.png | Bin 0 -> 29916 bytes Java基础教程/Java并发编程/java.thread.md | 370 ---- Java基础教程/Java并发编程/事件处理.md | 5 - Java基础教程/Java并发编程/事件监听机制.md | 117 -- .../Java并发编程/多线程共享受限资源.md | 14 - .../Java并发编程/多线程共享资源问题.md | 14 - Java基础教程/Java并发编程/多线程基本操作.md | 48 - Java基础教程/Java并发编程/多线程理论补充.md | 48 - Java基础教程/Java并发编程/多线程的其他操作.md | 40 - Java基础教程/Java并发编程/多线程的应用.md | 40 - Java基础教程/Java并发编程/多线程通讯问题.md | 166 -- Java基础教程/Java并发编程/多线程间的通讯.md | 166 -- Java基础教程/Java并发编程/并发控制.md | 321 ---- Java基础教程/Java并发编程/并发控制的原理.md | 125 -- Java基础教程/Java并发编程/并发机制.md | 284 --- Java基础教程/Java并发编程/并发通信.md | 0 Java基础教程/Java并发编程/底层事件处理.md | 5 - Java基础教程/Java语言基础/04 Java数组.md | 17 +- Java基础教程/Java语言基础/17 流式编程.md | 1 - .../{15 Java容器底层结构.md => 01 集合底层结构.md} | 0 Java基础教程/Java集合类/02 JavaCollection.md | 47 +- .../{03 List-ArrayList.md => 03 List.md} | 111 +- Java基础教程/Java集合类/04 Queue.md | 531 ++++++ Java基础教程/Java集合类/05 Set.md | 344 ++++ Java基础教程/Java集合类/06 Map.md | 425 +++++ .../Java集合类/07 Iterable&Ieterator.md | 175 ++ .../Java集合类/08 Comparable&Comparator.md | 186 ++ Java基础教程/Java集合类/09 Sort.md | 159 ++ Java基础教程/Java集合类/09 Stream.md | 771 ++++++++ Java基础教程/Java集合类/12 JavaQueue.md | 0 Java基础教程/Java集合类/13 JavaSet.md | 0 Java基础教程/Java集合类/14 JavaMap.md | 0 .../Java集合类/image/2022-12-15-16-54-49.png | Bin 0 -> 46506 bytes .../Java集合类/image/2022-12-15-16-54-56.png | Bin 0 -> 46506 bytes .../Java集合类/image/2022-12-15-16-55-23.png | Bin 0 -> 24217 bytes .../Java集合类/image/2022-12-15-17-11-05.png | Bin 0 -> 78586 bytes .../Java集合类/image/2022-12-15-17-14-17.png | Bin 0 -> 43974 bytes .../Java集合类/image/2022-12-15-19-08-19.png | Bin 0 -> 98397 bytes .../Java集合类/image/2022-12-15-19-08-34.png | Bin 0 -> 47432 bytes .../Java集合类/image/2022-12-15-19-16-20.png | Bin 0 -> 88776 bytes .../Java集合类/image/2022-12-15-19-17-09.png | Bin 0 -> 77932 bytes .../Java集合类/image/2022-12-15-19-28-47.png | Bin 0 -> 23578 bytes .../Java集合类/image/2022-12-15-19-35-52.png | Bin 0 -> 34766 bytes .../Java集合类/image/2022-12-15-19-38-24.png | Bin 0 -> 42108 bytes .../Java集合类/image/2022-12-15-19-39-03.png | Bin 0 -> 11026 bytes .../Java集合类/image/2022-12-15-20-19-36.png | Bin 0 -> 22815 bytes .../Java集合类/image/2022-12-15-21-12-52.png | Bin 0 -> 80756 bytes .../Java集合类/image/2022-12-15-21-53-10.png | Bin 0 -> 494187 bytes .../Java集合类/image/2022-12-15-22-45-56.png | Bin 0 -> 129822 bytes .../Java集合类/image/2022-12-15-22-46-12.png | Bin 0 -> 150276 bytes .../Java集合类/image/2022-12-15-22-46-59.png | Bin 0 -> 69000 bytes test.csv | 66 + test.log | 223 +-- 80 files changed, 5283 insertions(+), 3684 deletions(-) create mode 100644 Java基础教程/Java实用技巧/01 Java模板变量替换.md create mode 100644 Java基础教程/Java并发编程/01 Java并发实现.md create mode 100644 Java基础教程/Java并发编程/02 Java互斥同步.md create mode 100644 Java基础教程/Java并发编程/03 Java进程通信.md create mode 100644 Java基础教程/Java并发编程/04 Java线程池.md create mode 100644 Java基础教程/Java并发编程/05 JUC并发组件.md create mode 100644 Java基础教程/Java并发编程/06 Java线程安全.md create mode 100644 Java基础教程/Java并发编程/07 Java内存模型.md create mode 100644 Java基础教程/Java并发编程/08 Java锁优化.md delete mode 100644 Java基础教程/Java并发编程/Java 并发.md create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-16-18-55.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-18-02-06.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-19-59-39.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-19-59-48.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-20-01-57.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-20-02-05.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-20-02-13.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-20-02-23.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-20-02-33.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-20-24-02.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-20-24-06.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-20-24-10.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-20-24-15.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-16-20-53-47.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-19-11-10-40.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-19-14-45-38.png create mode 100644 Java基础教程/Java并发编程/image/2022-12-19-14-45-52.png delete mode 100644 Java基础教程/Java并发编程/java.thread.md delete mode 100644 Java基础教程/Java并发编程/事件处理.md delete mode 100644 Java基础教程/Java并发编程/事件监听机制.md delete mode 100644 Java基础教程/Java并发编程/多线程共享受限资源.md delete mode 100644 Java基础教程/Java并发编程/多线程共享资源问题.md delete mode 100644 Java基础教程/Java并发编程/多线程基本操作.md delete mode 100644 Java基础教程/Java并发编程/多线程理论补充.md delete mode 100644 Java基础教程/Java并发编程/多线程的其他操作.md delete mode 100644 Java基础教程/Java并发编程/多线程的应用.md delete mode 100644 Java基础教程/Java并发编程/多线程通讯问题.md delete mode 100644 Java基础教程/Java并发编程/多线程间的通讯.md delete mode 100644 Java基础教程/Java并发编程/并发控制.md delete mode 100644 Java基础教程/Java并发编程/并发控制的原理.md delete mode 100644 Java基础教程/Java并发编程/并发机制.md delete mode 100644 Java基础教程/Java并发编程/并发通信.md delete mode 100644 Java基础教程/Java并发编程/底层事件处理.md delete mode 100644 Java基础教程/Java语言基础/17 流式编程.md rename Java基础教程/Java集合类/{15 Java容器底层结构.md => 01 集合底层结构.md} (100%) rename Java基础教程/Java集合类/{03 List-ArrayList.md => 03 List.md} (87%) create mode 100644 Java基础教程/Java集合类/04 Queue.md create mode 100644 Java基础教程/Java集合类/05 Set.md create mode 100644 Java基础教程/Java集合类/06 Map.md create mode 100644 Java基础教程/Java集合类/07 Iterable&Ieterator.md create mode 100644 Java基础教程/Java集合类/08 Comparable&Comparator.md create mode 100644 Java基础教程/Java集合类/09 Sort.md create mode 100644 Java基础教程/Java集合类/09 Stream.md delete mode 100644 Java基础教程/Java集合类/12 JavaQueue.md delete mode 100644 Java基础教程/Java集合类/13 JavaSet.md delete mode 100644 Java基础教程/Java集合类/14 JavaMap.md create mode 100644 Java基础教程/Java集合类/image/2022-12-15-16-54-49.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-16-54-56.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-16-55-23.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-17-11-05.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-17-14-17.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-19-08-19.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-19-08-34.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-19-16-20.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-19-17-09.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-19-28-47.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-19-35-52.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-19-38-24.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-19-39-03.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-20-19-36.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-21-12-52.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-21-53-10.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-22-45-56.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-22-46-12.png create mode 100644 Java基础教程/Java集合类/image/2022-12-15-22-46-59.png create mode 100644 test.csv diff --git a/Java基础教程/JavaIO与网络编程/02 Java NIO.md b/Java基础教程/JavaIO与网络编程/02 Java NIO.md index dd29df14..fcd1ef40 100644 --- a/Java基础教程/JavaIO与网络编程/02 Java NIO.md +++ b/Java基础教程/JavaIO与网络编程/02 Java NIO.md @@ -1,4 +1,6 @@ - +> 参考文献 +> * [java nio一篇博客](https://blog.csdn.net/forezp/article/details/88414741) +> * [java nio并发编程网](http://ifeve.com/overview/) # NIO diff --git a/Java基础教程/Java实用技巧/01 Java模板变量替换.md b/Java基础教程/Java实用技巧/01 Java模板变量替换.md new file mode 100644 index 00000000..1e3d88cd --- /dev/null +++ b/Java基础教程/Java实用技巧/01 Java模板变量替换.md @@ -0,0 +1,61 @@ +## 1 org.apache.commons.text + +变量默认前缀是`${`,后缀是`}` +```xml + + org.apache.commons + commons-lang3 + 3.12.0 + +``` +```java +Map valuesMap = new HashMap(); +valuesMap.put("code", 1234); +String templateString = "验证码:${code},您正在登录管理后台,5分钟内输入有效。"; +StringSubstitutor sub = new StringSubstitutor(valuesMap); +String content= sub.replace(templateString); +System.out.println(content); +验证码:1234,您正在登录管理后台,5分钟内输入有效。 +``` +### 修改前缀、后缀 +```java +Map valuesMap = new HashMap(); +valuesMap.put("code", 1234); +String templateString = "验证码:[code],您正在登录管理后台,5分钟内输入有效。"; +StringSubstitutor sub = new StringSubstitutor(valuesMap); +//修改前缀、后缀 +sub.setVariablePrefix("["); +sub.setVariableSuffix("]"); +String content= sub.replace(templateString); +System.out.println(content); +``` + +## 2 org.springframework.expression +```java +String smsTemplate = "验证码:#{[code]},您正在登录管理后台,5分钟内输入有效。"; +Map params = new HashMap<>(); +params.put("code", 12345);; + +ExpressionParser parser = new SpelExpressionParser(); +TemplateParserContext parserContext = new TemplateParserContext(); +String content = parser.parseExpression(smsTemplate,parserContext).getValue(params, String.class); + +System.out.println(content); +验证码:12345,您正在登录管理后台,5分钟内输入有效。 +``` +ExpressionParser是简单的用java编写的表达式解析器,官方文档: + +http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html + +## 3 java.text.MessageFormat +```java +Object[] params = new Object[]{"1234", "5"}; +String msg = MessageFormat.format("验证码:{0},您正在登录管理后台,{1}分钟内输入有效。", params); +System.out.println(msg); +验证码:1234,您正在登录管理后台,10分钟内输入有效。 +``` +## 4 java.lang.String +```java +String s = String.format("My name is %s. I am %d.", "Tom", 18); +System.out.println(s); +``` \ No newline at end of file diff --git a/Java基础教程/Java并发编程/01 Java并发实现.md b/Java基础教程/Java并发编程/01 Java并发实现.md new file mode 100644 index 00000000..48e9000f --- /dev/null +++ b/Java基础教程/Java并发编程/01 Java并发实现.md @@ -0,0 +1,413 @@ +# java并发实现 + +## 1 并发实现 + +3中基本方法和4中拓展方法。 + +使用线程的3中基本方法 + +- 实现 Runnable 接口; +- 实现 Callable 接口; +- 继承 Thread 类。 + + +使用四种拓展的方法 +* 匿名内部类 +* ThreadPool&Executor +* 定时器timer +* stream + + +实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。 + +通过线程驱动执行线程任务 + + +### 实现 Runnable 接口 + +需要实现接口中的 run() 方法。 + +```java +public class MyRunnable implements Runnable { + @Override + public void run() { + // ... + } +} +``` + +使用 Runnable 实例再创建一个 Thread 实例,然后调用 Thread 实例的 start() 方法来启动线程。 + +```java +public static void main(String[] args) { + MyRunnable instance = new MyRunnable(); + Thread thread = new Thread(instance); + thread.start(); +} +``` + +### 实现 Callable 接口 + +与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。 + +```java +public class MyCallable implements Callable { + public Integer call() { + return 123; + } +} +``` + +```java +public static void main(String[] args) throws ExecutionException, InterruptedException { + MyCallable mc = new MyCallable(); + FutureTask ft = new FutureTask<>(mc); + Thread thread = new Thread(ft); + thread.start(); + System.out.println(ft.get()); +} +``` + +### 继承 Thread 类 + +同样也是需要实现 run() 方法,因为 Thread 类也实现了 Runable 接口。 + +当调用 start() 方法启动一个线程时,虚拟机会将该线程放入就绪队列中等待被调度,当一个线程被调度时会执行该线程的 run() 方法。 + +```java +public class MyThread extends Thread { + public void run() { + // ... + } +} +``` + +```java +public static void main(String[] args) { + MyThread mt = new MyThread(); + mt.start(); +} +``` + + + +### 通过内部类的方式实现多线程 +直接可以通过Thread类的start()方法进行实现,因为Thread类实现了Runnable接口,并重写了run方法,在run方法中实现自己的逻辑,例如: + +```java +//这里通过了CountDownLatch,来进行阻塞,来观察两个线程的启动,这样更加体现的明显一些: +public static CountDownLatch countDownLatch=new CountDownLatch(2); + +public static void main(String[] args) { + new Thread(()->{ + countDownLatch.countDown(); + try { + countDownLatch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("T1"); + }).start(); + + new Thread(()->{ + countDownLatch.countDown(); + try { + countDownLatch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("T2"); + }).start(); +} +``` + +### 通过线程池来实现多线程 +线程池可以根据不同的场景来选择不同的线程池来进行实现 +```java +//实现代码如下: +public class Demo5 { + + public static void main(String[] args) { + ExecutorService executorService = Executors.newFixedThreadPool(5); + for(int i=0;i<5;i++){ + int finalI = i; + executorService.execute(()-> { + System.out.println(finalI); + }); + } + } +} +``` + +### 通过Timer定时器来实现多线程 +就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,同样根据参数得不同存在多种执行方式,例如其中延迟定时任务这样: + +```java +//具体代码如下: +public class Demo6 { + + public static void main(String[] args) { + Timer timer=new Timer(); + timer.schedule(new TimerTask(){ + @Override + public void run() { + System.out.println(1); + } + },2000l,1000l); + } +} +``` + +### 通过stream实现多线程 +jdk1.8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 +Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 +具体简单代码实现如下: + +```java +//代码实现: +public class Demo7 { + +//为了更形象体现并发,通过countDownLatch进行阻塞 +static CountDownLatch countDownLatch=new CountDownLatch(6); + public static void main(String[] args) { + List list=new ArrayList<>(); + list.add(1); + list.add(2); + list.add(3); + list.add(4); + list.add(5); + list.add(6); + + list.parallelStream().forEach(p->{ + //将所有请求在打印之前进行阻塞,方便观察 + countDownLatch.countDown(); + try { + System.out.println("线程执行到这里啦"); + Thread.sleep(10000); + countDownLatch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println(p); + }); + } +} +``` + + +## 2 线程基础设置 + +### Daemon + +守护线程是程序运行时在后台提供服务的线程,不属于程序中不可或缺的部分。 + +当所有非守护线程结束时,程序也就终止,同时会杀死所有守护线程。 + +main() 属于非守护线程。 + +在线程启动之前使用 setDaemon() 方法可以将一个线程设置为守护线程。 + +```java +public static void main(String[] args) { + Thread thread = new Thread(new MyRunnable()); + thread.setDaemon(true); +} +``` + +### sleep + +Thread.sleep(millisec) 方法会休眠当前正在执行的线程,millisec 单位为毫秒。 + +sleep() 可能会抛出 InterruptedException,因为异常不能跨线程传播回 main() 中,因此必须在本地进行处理。线程中抛出的其它异常也同样需要在本地进行处理。 + +```java +public void run() { + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } +} +``` + +### yield + +对静态方法 Thread.yield() 的调用声明了当前线程已经完成了生命周期中最重要的部分,可以切换给其它线程来执行。该方法只是对线程调度器的一个建议,而且也只是建议具有相同优先级的其它线程可以运行。 + +```java +public void run() { + Thread.yield(); +} +``` + + +## 3 中断 + +一个线程执行完毕之后会自动结束,如果在运行过程中发生异常也会提前结束。 + +### InterruptedException + +通过调用一个线程的 interrupt() 来中断该线程,如果该线程处于阻塞、限期等待或者无限期等待状态,那么就会抛出 InterruptedException,从而提前结束该线程。但是不能中断 I/O 阻塞和 synchronized 锁阻塞。 + +对于以下代码,在 main() 中启动一个线程之后再中断它,由于线程中调用了 Thread.sleep() 方法,因此会抛出一个 InterruptedException,从而提前结束线程,不执行之后的语句。 + +```java +public class InterruptExample { + + private static class MyThread1 extends Thread { + @Override + public void run() { + try { + Thread.sleep(2000); + System.out.println("Thread run"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } +} +``` + +```java +public static void main(String[] args) throws InterruptedException { + Thread thread1 = new MyThread1(); + thread1.start(); + thread1.interrupt(); + System.out.println("Main run"); +} +``` + +```html +Main run +java.lang.InterruptedException: sleep interrupted + at java.lang.Thread.sleep(Native Method) + at InterruptExample.lambda$main$0(InterruptExample.java:5) + at InterruptExample$$Lambda$1/713338599.run(Unknown Source) + at java.lang.Thread.run(Thread.java:745) +``` + +### interrupted() + +如果一个线程的 run() 方法执行一个无限循环,并且没有执行 sleep() 等会抛出 InterruptedException 的操作,那么调用线程的 interrupt() 方法就无法使线程提前结束。 + +但是调用 interrupt() 方法会设置线程的中断标记,此时调用 interrupted() 方法会返回 true。因此可以在循环体中使用 interrupted() 方法来判断线程是否处于中断状态,从而提前结束线程。 + +```java +public class InterruptExample { + + private static class MyThread2 extends Thread { + @Override + public void run() { + while (!interrupted()) { + // .. + } + System.out.println("Thread end"); + } + } +} +``` + +```java +public static void main(String[] args) throws InterruptedException { + Thread thread2 = new MyThread2(); + thread2.start(); + thread2.interrupt(); +} +``` + +```html +Thread end +``` + +### Executor 的中断操作 + +调用 Executor 的 shutdown() 方法会等待线程都执行完毕之后再关闭,但是如果调用的是 shutdownNow() 方法,则相当于调用每个线程的 interrupt() 方法。 + +以下使用 Lambda 创建线程,相当于创建了一个匿名内部线程。 + +```java +public static void main(String[] args) { + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.execute(() -> { + try { + Thread.sleep(2000); + System.out.println("Thread run"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }); + executorService.shutdownNow(); + System.out.println("Main run"); +} +``` + +```html +Main run +java.lang.InterruptedException: sleep interrupted + at java.lang.Thread.sleep(Native Method) + at ExecutorInterruptExample.lambda$main$0(ExecutorInterruptExample.java:9) + at ExecutorInterruptExample$$Lambda$1/1160460865.run(Unknown Source) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +``` + +如果只想中断 Executor 中的一个线程,可以通过使用 submit() 方法来提交一个线程,它会返回一个 Future\ 对象,通过调用该对象的 cancel(true) 方法就可以中断线程。 + +```java +Future future = executorService.submit(() -> { + // .. +}); +future.cancel(true); +``` + + + +## 4 线程状态转换 + +一个线程只能处于一种状态,并且这里的线程状态特指 Java 虚拟机的线程状态,不能反映线程在特定操作系统下的状态。 + +### 新建(NEW) + +创建后尚未启动。 + +### 可运行(RUNABLE) + +正在 Java 虚拟机中运行。但是在操作系统层面,它可能处于运行状态,也可能等待资源调度(例如处理器资源),资源调度完成就进入运行状态。所以该状态的可运行是指可以被运行,具体有没有运行要看底层操作系统的资源调度。 + +### 阻塞(BLOCKED) + +请求获取 monitor lock 从而进入 synchronized 函数或者代码块,但是其它线程已经占用了该 monitor lock,所以出于阻塞状态。要结束该状态进入从而 RUNABLE 需要其他线程释放 monitor lock。 + +### 无限期等待(WAITING) + +等待其它线程显式地唤醒。 + +阻塞和等待的区别在于,阻塞是被动的,它是在等待获取 monitor lock。而等待是主动的,通过调用 Object.wait() 等方法进入。 + +| 进入方法 | 退出方法 | +| --- | --- | +| 没有设置 Timeout 参数的 Object.wait() 方法 | Object.notify() / Object.notifyAll() | +| 没有设置 Timeout 参数的 Thread.join() 方法 | 被调用的线程执行完毕 | +| LockSupport.park() 方法 | LockSupport.unpark(Thread) | + +### 限期等待(TIMED_WAITING) + +无需等待其它线程显式地唤醒,在一定时间之后会被系统自动唤醒。 + +| 进入方法 | 退出方法 | +| --- | --- | +| Thread.sleep() 方法 | 时间结束 | +| 设置了 Timeout 参数的 Object.wait() 方法 | 时间结束 / Object.notify() / Object.notifyAll() | +| 设置了 Timeout 参数的 Thread.join() 方法 | 时间结束 / 被调用的线程执行完毕 | +| LockSupport.parkNanos() 方法 | LockSupport.unpark(Thread) | +| LockSupport.parkUntil() 方法 | LockSupport.unpark(Thread) | + +调用 Thread.sleep() 方法使线程进入限期等待状态时,常常用“使一个线程睡眠”进行描述。调用 Object.wait() 方法使线程进入限期等待或者无限期等待时,常常用“挂起一个线程”进行描述。睡眠和挂起是用来描述行为,而阻塞和等待用来描述状态。 + +### 死亡(TERMINATED) + +可以是线程结束任务之后自己结束,或者产生了异常而结束。 + +[Java SE 9 Enum Thread.State](https://docs.oracle.com/javase/9/docs/api/java/lang/Thread.State.html) + diff --git a/Java基础教程/Java并发编程/02 Java互斥同步.md b/Java基础教程/Java并发编程/02 Java互斥同步.md new file mode 100644 index 00000000..8a4464cc --- /dev/null +++ b/Java基础教程/Java并发编程/02 Java互斥同步.md @@ -0,0 +1,445 @@ + +## 1 互斥同步 + +Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLock。 + +### synchronized + +**1. 同步一个代码块** + +```java +public void func() { + synchronized (this) { + // ... + } +} +``` + +它只作用于同一个对象,如果调用两个对象上的同步代码块,就不会进行同步。 + +对于以下代码,使用 ExecutorService 执行了两个线程,由于调用的是同一个对象的同步代码块,因此这两个线程会进行同步,当一个线程进入同步语句块时,另一个线程就必须等待。 + +```java +public class SynchronizedExample { + + public void func1() { + synchronized (this) { + for (int i = 0; i < 10; i++) { + System.out.print(i + " "); + } + } + } +} +``` + +```java +public static void main(String[] args) { + SynchronizedExample e1 = new SynchronizedExample(); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.execute(() -> e1.func1()); + executorService.execute(() -> e1.func1()); +} +``` + +```html +0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 +``` + +对于以下代码,两个线程调用了不同对象的同步代码块,因此这两个线程就不需要同步。从输出结果可以看出,两个线程交叉执行。 + +```java +public static void main(String[] args) { + SynchronizedExample e1 = new SynchronizedExample(); + SynchronizedExample e2 = new SynchronizedExample(); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.execute(() -> e1.func1()); + executorService.execute(() -> e2.func1()); +} +``` + +```html +0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 +``` + + +**2. 同步一个方法** +* 编写同步方法的一般语法如下。 这里的lockObject是对对象的引用,该对象的锁与同步语句表示的监视器相关联。 + * '.class' object -如果方法是静态的。 + * this' object -如果方法不是静态的。 “ this”是指对其中调用同步方法的当前对象的引用。 + +```java +public synchronized void func () { + // ... +} +``` + +它和同步代码块一样,作用于同一个对象。 + +**3. 同步一个类** + +```java +public void func() { + synchronized (SynchronizedExample.class) { + // ... + } +} +``` + +作用于整个类,也就是说两个线程调用同一个类的不同对象上的这种同步语句,也会进行同步。 + +```java +public class SynchronizedExample { + + public void func2() { + synchronized (SynchronizedExample.class) { + for (int i = 0; i < 10; i++) { + System.out.print(i + " "); + } + } + } +} +``` + +```java +public static void main(String[] args) { + SynchronizedExample e1 = new SynchronizedExample(); + SynchronizedExample e2 = new SynchronizedExample(); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.execute(() -> e1.func2()); + executorService.execute(() -> e2.func2()); +} +``` + +```html +0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 +``` + +**4. 同步一个静态方法** + +```java +public synchronized static void fun() { + // ... +} +``` + +作用于整个类。 + +### 对象级别和类级别的同步 + + +* 当我们要同步non-static method non-static code block时, Object level lock是一种机制,这样,只有一个线程将能够在给定的类实例上执行代码块。 应该始终这样做, 以确保实例级数据线程安全 。 + + +```java +public class DemoClass +{ + public synchronized void demoMethod(){} +} + +or + +public class DemoClass +{ + public void demoMethod(){ + synchronized (this) + { + //other thread safe code + } + } +} + +or + +public class DemoClass +{ + private final Object lock = new Object(); + public void demoMethod(){ + synchronized (lock) + { + //other thread safe code + } + } +} +``` + +* Class level lock可防止多个线程在运行时在该类的所有可用实例中的任何一个中进入synchronized块。 这意味着,如果在运行时有100个demoMethod()实例,则一次只能在一个实例中的任何一个线程上执行demoMethod() ,而所有其他实例将被其他线程锁定。 + +```java +public class DemoClass +{ + //Method is static + public synchronized static void demoMethod(){ + + } +} + +or + +public class DemoClass +{ + public void demoMethod() + { + //Acquire lock on .class reference + synchronized (DemoClass.class) + { + //other thread safe code + } + } +} + +or + +public class DemoClass +{ + private final static Object lock = new Object(); + + public void demoMethod() + { + //Lock object is static + synchronized (lock) + { + //other thread safe code + } + } +} +``` + +注意事项 +* Java中的同步保证了没有两个线程可以同时或并发执行需要相同锁的同步方法。 +* synchronized关键字只能与方法和代码块一起使用。 这些方法或块可以是static也可以non-static 。 +* 每当线程进入Java synchronized方法或块时,它都会获取一个锁,而当线程离开同步方法或块时,它将释放该锁。 即使线程在完成后或由于任何错误或异常而离开同步方法时,也会释放锁定。 +* Java synchronized关键字本质上是可re-entrant ,这意味着如果一个同步方法调用另一个需要相同锁的同步方法,则持有锁的当前线程可以进入该方法而无需获取锁。 +* 如果在同步块中使用的对象为null,则Java同步将引发NullPointerException 。 例如,在上面的代码示例中,如果将锁初始化为null,则“ synchronized (lock) ”将抛出NullPointerException 。 +* Java中的同步方法使您的应用程序性能降低。 因此,在绝对需要时使用同步。 另外,请考虑使用同步的代码块仅同步代码的关键部分。 +* 静态同步方法和非静态同步方法都可能同时或同时运行,因为它们锁定在不同的对象上。 +* 根据Java语言规范,您不能在构造函数中使用synchronized关键字。 这是非法的,并导致编译错误。 +* 不要在Java中的同步块上的非final字段上进行同步。 因为非最终字段的引用可能随时更改,然后不同的线程可能会在不同的对象上进行同步,即完全没有同步。 +* 不要使用String文字,因为它们可能在应用程序中的其他地方被引用,并且可能导致死锁。 使用new关键字创建的字符串对象可以安全使用。 但作为最佳实践,请在我们要保护的共享变量本身上创建一个新的private作用域Object实例OR锁。 + + +### ReentrantLock + +ReentrantLock 是 java.util.concurrent(J.U.C)包中的锁。 + +```java +public class LockExample { + + private Lock lock = new ReentrantLock(); + + public void func() { + lock.lock(); + try { + for (int i = 0; i < 10; i++) { + System.out.print(i + " "); + } + } finally { + lock.unlock(); // 确保释放锁,从而避免发生死锁。 + } + } +} +``` + +```java +public static void main(String[] args) { + LockExample lockExample = new LockExample(); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.execute(() -> lockExample.func()); + executorService.execute(() -> lockExample.func()); +} +``` + +```html +0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 +``` + + +### 比较 +除非需要使用 ReentrantLock 的高级功能,否则优先使用 synchronized。这是因为 synchronized 是 JVM 实现的一种锁机制,JVM 原生地支持它,而 ReentrantLock 不是所有的 JDK 版本都支持。并且使用 synchronized 不用担心没有释放锁而导致死锁问题,因为 JVM 会确保锁的释放。 + + +**1. 锁的实现** + +synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 实现的。 + +**2. 性能** + +新版本 Java 对 synchronized 进行了很多优化,例如自旋锁等,synchronized 与 ReentrantLock 大致相同。 + +**3. 等待可中断** + +当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情。 + +ReentrantLock 可中断,而 synchronized 不行。 + +**4. 公平锁** + +公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁。 + +synchronized 中的锁是非公平的,ReentrantLock 默认情况下也是非公平的,但是也可以是公平的。 + +**5. 锁绑定多个条件** + +一个 ReentrantLock 可以同时绑定多个 Condition 对象。 + + + + +## 2 线程之间的协作 + +当多个线程可以一起工作去解决某个问题时,如果某些部分必须在其它部分之前完成,那么就需要对线程进行协调。 + +### Thread:join + +在线程中调用另一个线程的 join() 方法,会将当前线程挂起,而不是忙等待,直到目标线程结束。 + +对于以下代码,虽然 b 线程先启动,但是因为在 b 线程中调用了 a 线程的 join() 方法,b 线程会等待 a 线程结束才继续执行,因此最后能够保证 a 线程的输出先于 b 线程的输出。 + +```java +public class JoinExample { + + private class A extends Thread { + @Override + public void run() { + System.out.println("A"); + } + } + + private class B extends Thread { + + private A a; + + B(A a) { + this.a = a; + } + + @Override + public void run() { + try { + a.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("B"); + } + } + + public void test() { + A a = new A(); + B b = new B(a); + b.start(); + a.start(); + } +} +``` + +```java +public static void main(String[] args) { + JoinExample example = new JoinExample(); + example.test(); +} +``` + +``` +A +B +``` + +### Object:wait、notify、notifyAll + +调用 wait() 使得线程等待某个条件满足,线程在等待时会被挂起,当其他线程的运行使得这个条件满足时,其它线程会调用 notify() 或者 notifyAll() 来唤醒挂起的线程。 + +它们都属于 Object 的一部分,而不属于 Thread。 + +只能用在同步方法或者同步控制块中使用,否则会在运行时抛出 IllegalMonitorStateException。 + +使用 wait() 挂起期间,线程会释放锁。这是因为,如果没有释放锁,那么其它线程就无法进入对象的同步方法或者同步控制块中,那么就无法执行 notify() 或者 notifyAll() 来唤醒挂起的线程,造成死锁。 + +```java +public class WaitNotifyExample { + + public synchronized void before() { + System.out.println("before"); + notifyAll(); + } + + public synchronized void after() { + try { + wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("after"); + } +} +``` + +```java +public static void main(String[] args) { + ExecutorService executorService = Executors.newCachedThreadPool(); + WaitNotifyExample example = new WaitNotifyExample(); + executorService.execute(() -> example.after()); + executorService.execute(() -> example.before()); +} +``` + +```html +before +after +``` + +**wait() 和 sleep() 的区别** + +- wait() 是 Object 的方法,而 sleep() 是 Thread 的静态方法; +- wait() 会释放锁,sleep() 不会。 + +### Condition:await、signal、signalAll + +java.util.concurrent 类库中提供了 Condition 类来实现线程之间的协调,可以在 Condition 上调用 await() 方法使线程等待,其它线程调用 signal() 或 signalAll() 方法唤醒等待的线程。 + +相比于 wait() 这种等待方式,await() 可以指定等待的条件,因此更加灵活。 + +使用 Lock 来获取一个 Condition 对象。 + +```java +public class AwaitSignalExample { + + private Lock lock = new ReentrantLock(); + private Condition condition = lock.newCondition(); + + public void before() { + lock.lock(); + try { + System.out.println("before"); + condition.signalAll(); + } finally { + lock.unlock(); + } + } + + public void after() { + lock.lock(); + try { + condition.await(); + System.out.println("after"); + } catch (InterruptedException e) { + e.printStackTrace(); + } finally { + lock.unlock(); + } + } +} +``` + +```java +public static void main(String[] args) { + ExecutorService executorService = Executors.newCachedThreadPool(); + AwaitSignalExample example = new AwaitSignalExample(); + executorService.execute(() -> example.after()); + executorService.execute(() -> example.before()); +} +``` + +```html +before +after +``` \ No newline at end of file diff --git a/Java基础教程/Java并发编程/03 Java进程通信.md b/Java基础教程/Java并发编程/03 Java进程通信.md new file mode 100644 index 00000000..9a718355 --- /dev/null +++ b/Java基础教程/Java并发编程/03 Java进程通信.md @@ -0,0 +1,166 @@ +## 1 Pipe + + +PipedReader是Reader类的扩展,用于读取字符流。 它的read()方法读取连接的PipedWriter的流。 同样, PipedWriter是Writer类的扩展,它完成Reader类所收缩的所有工作。 + + +* 读线程 + +```java +public class PipeReaderThread implements Runnable +{ + PipedReader pr; + String name = null; + + public PipeReaderThread(String name, PipedReader pr) + { + this.name = name; + this.pr = pr; + } + + public void run() + { + try { + // continuously read data from stream and print it in console + while (true) { + char c = (char) pr.read(); // read a char + if (c != -1) { // check for -1 indicating end of file + System.out.print(c); + } + } + } catch (Exception e) { + System.out.println(" PipeThread Exception: " + e); + } + } +} +``` +* 写线程 + +```java +public class PipeWriterThread implements Runnable +{ + PipedWriter pw; + String name = null; + + public PipeWriterThread(String name, PipedWriter pw) { + this.name = name; + this.pw = pw; + } + + public void run() { + try { + while (true) { + // Write some data after every two seconds + pw.write("Testing data written...n"); + pw.flush(); + Thread.sleep(2000); + } + } catch (Exception e) { + System.out.println(" PipeThread Exception: " + e); + } + } +} +``` + +* 测试代码 + +```java +package multiThread; + +import java.io.*; + +public class PipedCommunicationTest +{ + public static void main(String[] args) + { + new PipedCommunicationTest(); + } + + public PipedCommunicationTest() + { + try + { + // Create writer and reader instances + PipedReader pr = new PipedReader(); + PipedWriter pw = new PipedWriter(); + + // Connect the writer with reader + pw.connect(pr); + + // Create one writer thread and one reader thread + Thread thread1 = new Thread(new PipeReaderThread("ReaderThread", pr)); + + Thread thread2 = new Thread(new PipeWriterThread("WriterThread", pw)); + + // start both threads + thread1.start(); + thread2.start(); + + } + catch (Exception e) + { + System.out.println("PipeThread Exception: " + e); + } + } +} +``` + +## 2 BlockQueue(新的最佳实践) + + +```java +package corejava.thread; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +public class DemoExecutor +{ + public static void main(String[] args) + { + Integer threadCounter = 0; + BlockingQueue blockingQueue = new ArrayBlockingQueue(50); + + CustomThreadPoolExecutor executor = new CustomThreadPoolExecutor(10, + 20, 5000, TimeUnit.MILLISECONDS, blockingQueue); + + executor.setRejectedExecutionHandler(new RejectedExecutionHandler() { + @Override + public void rejectedExecution(Runnable r, + ThreadPoolExecutor executor) { + System.out.println("DemoTask Rejected : " + + ((DemoTask) r).getName()); + System.out.println("Waiting for a second !!"); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("Lets add another time : " + + ((DemoTask) r).getName()); + executor.execute(r); + } + }); + // Let start all core threads initially + executor.prestartAllCoreThreads(); + while (true) { + threadCounter++; + // Adding threads one by one + System.out.println("Adding DemoTask : " + threadCounter); + executor.execute(new DemoTask(threadCounter.toString())); + + if (threadCounter == 100) + break; + } + } + +} + +``` + + + +## 3 共享数据(最基本的通信方式) \ No newline at end of file diff --git a/Java基础教程/Java并发编程/04 Java线程池.md b/Java基础教程/Java并发编程/04 Java线程池.md new file mode 100644 index 00000000..eac66b25 --- /dev/null +++ b/Java基础教程/Java并发编程/04 Java线程池.md @@ -0,0 +1,448 @@ + +## 1 Executor概述 + +### 概述 +Executor framework框架由三个主要接口(以及许多子接口)组成,即Executor , ExecutorService和ThreadPoolExecutor 。 +* 该框架主要将任务创建和执行分开。 任务创建主要是样板代码,并且很容易替换。 +* 对于执行者,我们必须创建实现Runnable或Callable接口的任务,并将其发送给执行者。 +* 执行程序在内部维护一个(可配置的)线程池,以通过避免连续产生线程来提高应用程序性能。 +* 执行程序负责执行任务,并使用池中的必要线程运行它们。 + + + +### 分类 + +Executor 管理多个异步任务的执行,而无需程序员显式地管理线程的生命周期。这里的异步是指多个任务的执行互不干扰,不需要进行同步操作。 + +- CachedThreadPool:缓存线程池执行程序 –创建一个线程池,该线程池可根据需要创建新线程,但在可用时将重用以前构造的线程。 如果任务长时间运行,请勿使用此线程池。 如果线程数超出系统可以处理的范围,则可能导致系统崩溃。 +- FixedThreadPool:固定线程池执行程序 –创建一个线程池,该线程池可重用固定数量的线程来执行任意数量的任务。 如果在所有线程都处于活动状态时提交了其他任务,则它们将在队列中等待,直到某个线程可用为止。 最适合现实生活中的大多数用例。 +- SingleThreadExecutor:相当于大小为 1 的 FixedThreadPool,单线程池执行程序 –创建单线程以执行所有任务。 当您只有一个任务要执行时,请使用它。 +- ScheduledThreadPool:调度线程池执行程序 –创建一个线程池,该线程池可以调度命令以在给定延迟后运行或定期执行。 +- ForkJoinPool:分支合并线程池,适合用于处理复杂任务。初始化线程容量与 CPU 核心数相关。线程池中运行的内容必须是 ForkJoinTask 的子类型(RecursiveTask,RecursiveAction)。 +- WorkStealingPool:JDK1.8 新增的线程池。工作窃取线程池。当线程池中有空闲连接时,自动到等待队列中窃取未完成任务,自动执行。初始化线程容量与 CPU 核心数相关。此线程池中维护的是精灵线程。ExecutorService.newWorkStealingPool(); + + +ThreadPoolExecutor类具有四个不同的构造函数,但是由于它们的复杂性,Java并发API提供了Executors类来构造执行程序和其他相关对象。 尽管我们可以使用其构造函数之一直接创建ThreadPoolExecutor ,但是建议使用Executors类。 + +```java +public static void main(String[] args) { + ExecutorService executorService = Executors.newCachedThreadPool(); + for (int i = 0; i < 5; i++) { + executorService.execute(new MyRunnable()); + } + executorService.shutdown(); +} +``` + + +### 使用 + + +1. 通过executors工具类创建.Executors是一个实用程序类,它提供用于创建接口实现的工厂方法。 + +```java +//Executes only one thread +ExecutorService es = Executors.newSingleThreadExecutor(); + +//Internally manages thread pool of 2 threads +ExecutorService es = Executors.newFixedThreadPool(2); + +//Internally manages thread pool of 10 threads to run scheduled tasks +ExecutorService es = Executors.newScheduledThreadPool(10); +``` + +2. 创建ExecutorService。我们可以选择ExecutorService接口的实现类,然后直接创建它的实例。 下面的语句创建一个线程池执行程序,该线程池执行程序的最小线程数为10,最大线程数为100,存活时间为5毫秒,并且有一个阻塞队列来监视将来的任务。 + + + +```java +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +ExecutorService executorService = new ThreadPoolExecutor(10, 100, 5L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue()); +``` + +3. Execute Runnable tasks + 1. void execute(Runnable task) –在将来的某个时间执行给定命令。 + 2. Future submit(Runnable task)可运行Future submit(Runnable task) –提交要执行的可运行任务,并返回代表该任务的Future 。 Future的get()方法成功完成后将返回null 。 + 3. 提交可运行任务以执行并返回代表该任务的Future 。 Future的get()方法将在成功完成后返回给定的result + +```java + +import java.time.LocalDateTime; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +public class Main +{ + public static void main(String[] args) + { + //Demo task + Runnable runnableTask = () -> { + try { + TimeUnit.MILLISECONDS.sleep(1000); + System.out.println("Current time :: " + LocalDateTime.now()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }; + + //Executor service instance + ExecutorService executor = Executors.newFixedThreadPool(10); + + //1. execute task using execute() method + executor.execute(runnableTask); + + //2. execute task using submit() method + Future result = executor.submit(runnableTask, "DONE"); + + while(result.isDone() == false) + { + try + { + System.out.println("The method return value : " + result.get()); + break; + } + catch (InterruptedException | ExecutionException e) + { + e.printStackTrace(); + } + + //Sleep for 1 second + try { + Thread.sleep(1000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + //Shut down the executor service + executor.shutdownNow(); + } +} +``` + + +4. Execute Callable tasks + 1. Future submit(callableTask) –提交一个执行返回值的任务,并返回代表该任务的未决结果的未来。 + 2. List invokeAll(Collection tasks) –执行给定的任务,并when all complete返回保存其状态和结果的Future列表。 注意,仅当所有任务完成时结果才可用。请注意,已完成的任务可能已正常终止,也可能引发异常。 + 3. List invokeAll(Collection task,timeOut,timeUnit) –执行给定的任务,并在所有完成或超时到期时返回保存其状态和结果的Future列表。 + + +```java + +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +public class Main +{ + public static void main(String[] args) throws ExecutionException + { + //Demo Callable task + Callable callableTask = () -> { + TimeUnit.MILLISECONDS.sleep(1000); + return "Current time :: " + LocalDateTime.now(); + }; + + //Executor service instance + ExecutorService executor = Executors.newFixedThreadPool(1); + + List> tasksList = Arrays.asList(callableTask, callableTask, callableTask); + + //1. execute tasks list using invokeAll() method + try + { + List> results = executor.invokeAll(tasksList); + + for(Future result : results) { + System.out.println(result.get()); + } + } + catch (InterruptedException e1) + { + e1.printStackTrace(); + } + + //2. execute individual tasks using submit() method + Future result = executor.submit(callableTask); + + while(result.isDone() == false) + { + try + { + System.out.println("The method return value : " + result.get()); + break; + } + catch (InterruptedException | ExecutionException e) + { + e.printStackTrace(); + } + + //Sleep for 1 second + try { + Thread.sleep(1000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + //Shut down the executor service + executor.shutdownNow(); + } +} +``` +## 2 FixedThreadPool +* 如果有任何任务引发异常,则应用程序将捕获该异常并重新启动该任务。 +* 如果有任何任务运行完毕,应用程序将注意到并重新启动任务。 +```java +package com.howtodoinjava.multiThreading.executors; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +public class DemoExecutorUsage { + + private static ExecutorService executor = null; + private static volatile Future taskOneResults = null; + private static volatile Future taskTwoResults = null; + + public static void main(String[] args) { + executor = Executors.newFixedThreadPool(2); + while (true) + { + try + { + checkTasks(); + Thread.sleep(1000); + } catch (Exception e) { + System.err.println("Caught exception: " + e.getMessage()); + } + } + } + + private static void checkTasks() throws Exception { + if (taskOneResults == null + || taskOneResults.isDone() + || taskOneResults.isCancelled()) + { + taskOneResults = executor.submit(new TestOne()); + } + + if (taskTwoResults == null + || taskTwoResults.isDone() + || taskTwoResults.isCancelled()) + { + taskTwoResults = executor.submit(new TestTwo()); + } + } +} + +class TestOne implements Runnable { + public void run() { + while (true) + { + System.out.println("Executing task one"); + try + { + Thread.sleep(1000); + } catch (Throwable e) { + e.printStackTrace(); + } + } + + } +} + +class TestTwo implements Runnable { + public void run() { + while (true) + { + System.out.println("Executing task two"); + try + { + Thread.sleep(1000); + } catch (Throwable e) { + e.printStackTrace(); + } + } + } +} +``` + +## 3 ForkJoinPool + +主要用于并行计算中,和 MapReduce 原理类似,都是把大的计算任务拆分成多个小任务并行计算。 + +```java +public class ForkJoinExample extends RecursiveTask { + + private final int threshold = 5; + private int first; + private int last; + + public ForkJoinExample(int first, int last) { + this.first = first; + this.last = last; + } + + @Override + protected Integer compute() { + int result = 0; + if (last - first <= threshold) { + // 任务足够小则直接计算 + for (int i = first; i <= last; i++) { + result += i; + } + } else { + // 拆分成小任务 + int middle = first + (last - first) / 2; + ForkJoinExample leftTask = new ForkJoinExample(first, middle); + ForkJoinExample rightTask = new ForkJoinExample(middle + 1, last); + leftTask.fork(); + rightTask.fork(); + result = leftTask.join() + rightTask.join(); + } + return result; + } +} +``` + +```java +public static void main(String[] args) throws ExecutionException, InterruptedException { + ForkJoinExample example = new ForkJoinExample(1, 10000); + ForkJoinPool forkJoinPool = new ForkJoinPool(); + Future result = forkJoinPool.submit(example); + System.out.println(result.get()); +} +``` + +ForkJoin 使用 ForkJoinPool 来启动,它是一个特殊的线程池,线程数量取决于 CPU 核数。 + +```java +public class ForkJoinPool extends AbstractExecutorService +``` + +ForkJoinPool 实现了工作窃取算法来提高 CPU 的利用率。每个线程都维护了一个双端队列,用来存储需要执行的任务。工作窃取算法允许空闲的线程从其它线程的双端队列中窃取一个任务来执行。窃取的任务必须是最晚的任务,避免和队列所属线程发生竞争。例如下图中,Thread2 从 Thread1 的队列中拿出最晚的 Task1 任务,Thread1 会拿出 Task2 来执行,这样就避免发生竞争。但是如果队列中只有一个任务时还是会发生竞争。 + +![](image/2022-12-16-20-53-47.png) + +## 4 ScheduledThreadPool + +而是您可能要在一段时间后执行任务或定期执行任务。 为此,Executor框架提供ScheduledThreadPoolExecutor类。 + +1. 实现一个任务 +```java +class Task implements Runnable +{ + private String name; + + public Task(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + @Override + public void run() + { + try { + System.out.println("Doing a task during : " + name + " - Time - " + new Date()); + } + catch (Exception e) { + e.printStackTrace(); + } + } +} +``` + +2. Execute a task after a period of time. + +```java + +package com.howtodoinjava.demo.multithreading; + +import java.util.Date; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +public class ScheduledThreadPoolExecutorExample +{ + public static void main(String[] args) + { + ScheduledExecutorService executor = Executors.newScheduledThreadPool(2); + Task task1 = new Task ("Demo Task 1"); + Task task2 = new Task ("Demo Task 2"); + + System.out.println("The time is : " + new Date()); + + executor.schedule(task1, 5 , TimeUnit.SECONDS); + executor.schedule(task2, 10 , TimeUnit.SECONDS); + + try { + executor.awaitTermination(1, TimeUnit.DAYS); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + executor.shutdown(); + } +} + +Output: + +The time is : Wed Mar 25 16:14:07 IST 2015 +Doing a task during : Demo Task 1 - Time - Wed Mar 25 16:14:12 IST 2015 +Doing a task during : Demo Task 2 - Time - Wed Mar 25 16:14:17 IST 2015 +``` + + +3. Execute a task periodically + +```java +public class ScheduledThreadPoolExecutorExample +{ + public static void main(String[] args) + { + ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); + Task task1 = new Task ("Demo Task 1"); + + System.out.println("The time is : " + new Date()); + + ScheduledFuture result = executor.scheduleAtFixedRate(task1, 2, 5, TimeUnit.SECONDS); + + try { + TimeUnit.MILLISECONDS.sleep(20000); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + + executor.shutdown(); + } +} + +Output: + +The time is : Wed Mar 25 16:20:12 IST 2015 +Doing a task during : Demo Task 1 - Time - Wed Mar 25 16:20:14 IST 2015 +Doing a task during : Demo Task 1 - Time - Wed Mar 25 16:20:19 IST 2015 +Doing a task during : Demo Task 1 - Time - Wed Mar 25 16:20:24 IST 2015 +Doing a task during : Demo Task 1 - Time - Wed Mar 25 16:20:29 IST 2015 +``` \ No newline at end of file diff --git a/Java基础教程/Java并发编程/05 JUC并发组件.md b/Java基础教程/Java并发编程/05 JUC并发组件.md new file mode 100644 index 00000000..4b1c9239 --- /dev/null +++ b/Java基础教程/Java并发编程/05 JUC并发组件.md @@ -0,0 +1,286 @@ +## 1 J.U.C - AQS + +java.util.concurrent(J.U.C)大大提高了并发性能,AQS 被认为是 J.U.C 的核心。 + +### CountDownLatch + +用来控制一个或者多个线程等待多个线程。 + +维护了一个计数器 cnt,每次调用 countDown() 方法会让计数器的值减 1,减到 0 的时候,那些因为调用 await() 方法而在等待的线程就会被唤醒。 + +![](image/2022-12-19-14-45-38.png) + +```java +public class CountdownLatchExample { + + public static void main(String[] args) throws InterruptedException { + final int totalThread = 10; + CountDownLatch countDownLatch = new CountDownLatch(totalThread); + ExecutorService executorService = Executors.newCachedThreadPool(); + for (int i = 0; i < totalThread; i++) { + executorService.execute(() -> { + System.out.print("run.."); + countDownLatch.countDown(); + }); + } + countDownLatch.await(); + System.out.println("end"); + executorService.shutdown(); + } +} +``` + +```html +run..run..run..run..run..run..run..run..run..run..end +``` + +### CyclicBarrier + +用来控制多个线程互相等待,只有当多个线程都到达时,这些线程才会继续执行。 + +和 CountdownLatch 相似,都是通过维护计数器来实现的。线程执行 await() 方法之后计数器会减 1,并进行等待,直到计数器为 0,所有调用 await() 方法而在等待的线程才能继续执行。 + +CyclicBarrier 和 CountdownLatch 的一个区别是,CyclicBarrier 的计数器通过调用 reset() 方法可以循环使用,所以它才叫做循环屏障。 + +CyclicBarrier 有两个构造函数,其中 parties 指示计数器的初始值,barrierAction 在所有线程都到达屏障的时候会执行一次。 + +```java +public CyclicBarrier(int parties, Runnable barrierAction) { + if (parties <= 0) throw new IllegalArgumentException(); + this.parties = parties; + this.count = parties; + this.barrierCommand = barrierAction; +} + +public CyclicBarrier(int parties) { + this(parties, null); +} +``` + +![](image/2022-12-19-14-45-52.png) + +```java +public class CyclicBarrierExample { + + public static void main(String[] args) { + final int totalThread = 10; + CyclicBarrier cyclicBarrier = new CyclicBarrier(totalThread); + ExecutorService executorService = Executors.newCachedThreadPool(); + for (int i = 0; i < totalThread; i++) { + executorService.execute(() -> { + System.out.print("before.."); + try { + cyclicBarrier.await(); + } catch (InterruptedException | BrokenBarrierException e) { + e.printStackTrace(); + } + System.out.print("after.."); + }); + } + executorService.shutdown(); + } +} +``` + +```html +before..before..before..before..before..before..before..before..before..before..after..after..after..after..after..after..after..after..after..after.. +``` + +### Semaphore + +Semaphore 类似于操作系统中的信号量,可以控制对互斥资源的访问线程数。 + +以下代码模拟了对某个服务的并发请求,每次只能有 3 个客户端同时访问,请求总数为 10。 + +```java +public class SemaphoreExample { + + public static void main(String[] args) { + final int clientCount = 3; + final int totalRequestCount = 10; + Semaphore semaphore = new Semaphore(clientCount); + ExecutorService executorService = Executors.newCachedThreadPool(); + for (int i = 0; i < totalRequestCount; i++) { + executorService.execute(()->{ + try { + semaphore.acquire(); + System.out.print(semaphore.availablePermits() + " "); + } catch (InterruptedException e) { + e.printStackTrace(); + } finally { + semaphore.release(); + } + }); + } + executorService.shutdown(); + } +} +``` + +```html +2 1 2 2 2 2 2 1 2 2 +``` + + +### FutureTask + +在介绍 Callable 时我们知道它可以有返回值,返回值通过 Future\ 进行封装。FutureTask 实现了 RunnableFuture 接口,该接口继承自 Runnable 和 Future\ 接口,这使得 FutureTask 既可以当做一个任务执行,也可以有返回值。 + +```java +public class FutureTask implements RunnableFuture +``` + +```java +public interface RunnableFuture extends Runnable, Future +``` + +FutureTask 可用于异步获取执行结果或取消执行任务的场景。当一个计算任务需要执行很长时间,那么就可以用 FutureTask 来封装这个任务,主线程在完成自己的任务之后再去获取结果。 + +```java +public class FutureTaskExample { + + public static void main(String[] args) throws ExecutionException, InterruptedException { + FutureTask futureTask = new FutureTask(new Callable() { + @Override + public Integer call() throws Exception { + int result = 0; + for (int i = 0; i < 100; i++) { + Thread.sleep(10); + result += i; + } + return result; + } + }); + + Thread computeThread = new Thread(futureTask); + computeThread.start(); + + Thread otherThread = new Thread(() -> { + System.out.println("other task is running..."); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }); + otherThread.start(); + System.out.println(futureTask.get()); + } +} +``` + +```html +other task is running... +4950 +``` + + + + +## 2 J.U.C -并发容器 + +并发集合是指使用了最新并发能力的集合,在JUC包下。而同步集合指之前用同步锁实现的集合 + +### CopyOnWrite + +CopyOnWriteArrayList在写的时候会复制一个副本,对副本写,写完用副本替换原值,读的时候不需要同步,适用于写少读多的场合。 + + +CopyOnWriteArraySet基于CopyOnWriteArrayList来实现的,只是在不允许存在重复的对象这个特性上遍历处理了一下。 + + + +### BlockingQueue + +在并发队列上JDK提供了两套实现, +* 一个是以ConcurrentLinkedQueue为代表的高性能队列 +* 一个是以BlockingQueue接口为代表的阻塞队列。 + +ConcurrentLinkedQueue适用于高并发场景下的队列,通过无锁的方式实现,通常ConcurrentLinkedQueue的性能要优于BlockingQueue。BlockingQueue的典型应用场景是生产者-消费者模式中,如果生产快于消费,生产队列装满时会阻塞,等待消费。 + + + +java.util.concurrent.BlockingQueue 接口有以下阻塞队列的实现: + +- **FIFO 队列** :LinkedBlockingQueue、ArrayBlockingQueue(固定长度) +- **优先级队列** :PriorityBlockingQueue + +提供了阻塞的 take() 和 put() 方法:如果队列为空 take() 将阻塞,直到队列中有内容;如果队列为满 put() 将阻塞,直到队列有空闲位置。 + +**使用 BlockingQueue 实现生产者消费者问题** + +```java +public class ProducerConsumer { + + private static BlockingQueue queue = new ArrayBlockingQueue<>(5); + + private static class Producer extends Thread { + @Override + public void run() { + try { + queue.put("product"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.print("produce.."); + } + } + + private static class Consumer extends Thread { + + @Override + public void run() { + try { + String product = queue.take(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.print("consume.."); + } + } +} +``` + +```java +public static void main(String[] args) { + for (int i = 0; i < 2; i++) { + Producer producer = new Producer(); + producer.start(); + } + for (int i = 0; i < 5; i++) { + Consumer consumer = new Consumer(); + consumer.start(); + } + for (int i = 0; i < 3; i++) { + Producer producer = new Producer(); + producer.start(); + } +} +``` + +```html +produce..produce..consume..consume..produce..consume..produce..consume..produce..consume.. +``` + + +### Concurrent +* ConcurrentLinkedQueue +* ConcurrentLinkedDeque + +* ConcurrentHashMap + +是专用于高并发的Map实现,内部实现进行了锁分离,get操作是无锁的。 + +* ConcurrentSkipListMap + +java api也提供了一个实现ConcurrentSkipListMap接口的类,ConcurrentSkipListMap接口实现了与ConcurrentNavigableMap接口有相同行为的一个非阻塞式列表。从内部实现机制来讲,它使用了一个Skip List来存放数据。Skip List是基于并发列表的数据结构,效率与二叉树相近。 +当插入元素到映射中时,ConcurrentSkipListMap接口类使用键值来排序所有元素。除了提供返回一个具体元素的方法外,这个类也提供获取子映射的方法。 + +ConcurrentSkipListMap类提供的常用方法: +```java +1.headMap(K toKey):K是在ConcurrentSkipListMap对象的 泛型参数里用到的键。这个方法返回映射中所有键值小于参数值toKey的子映射。 +2.tailMap(K fromKey):K是在ConcurrentSkipListMap对象的 泛型参数里用到的键。这个方法返回映射中所有键值大于参数值fromKey的子映射。 +3.putIfAbsent(K key,V value):如果映射中不存在键key,那么就将key和value保存到映射中。 +4.pollLastEntry():返回并移除映射中的最后一个Map.Entry对象。 +5.replace(K key,V value):如果映射中已经存在键key,则用参数中的value替换现有的值。 +``` \ No newline at end of file diff --git a/Java基础教程/Java并发编程/06 Java线程安全.md b/Java基础教程/Java并发编程/06 Java线程安全.md new file mode 100644 index 00000000..f245c7ed --- /dev/null +++ b/Java基础教程/Java并发编程/06 Java线程安全.md @@ -0,0 +1,365 @@ +# Java 并发 + +## 1 线程安全概述 + +### 线程不安全示例 + +如果多个线程对同一个共享数据进行访问而不采取同步操作的话,那么操作的结果是不一致的。 + +以下代码演示了 1000 个线程同时对 cnt 执行自增操作,操作结束之后它的值有可能小于 1000。 + +```java +public class ThreadUnsafeExample { + + private int cnt = 0; + + public void add() { + cnt++; + } + + public int get() { + return cnt; + } +} +``` + +```java +public static void main(String[] args) throws InterruptedException { + final int threadSize = 1000; + ThreadUnsafeExample example = new ThreadUnsafeExample(); + final CountDownLatch countDownLatch = new CountDownLatch(threadSize); + ExecutorService executorService = Executors.newCachedThreadPool(); + for (int i = 0; i < threadSize; i++) { + executorService.execute(() -> { + example.add(); + countDownLatch.countDown(); + }); + } + countDownLatch.await(); + executorService.shutdown(); + System.out.println(example.get()); +} +``` + +```html +997 +``` + + +### 线程安全 + +多个线程不管以何种方式访问某个类,并且在主调代码中不需要进行同步,都能表现正确的行为。 + +线程安全有以下几种实现方式: +* 不可变对象 +* 无同步方案 +* 互斥同步 +* 非阻塞同步 + +## 2 不可变对象 + +不可变(Immutable)的对象一定是线程安全的,不需要再采取任何的线程安全保障措施。只要一个不可变的对象被正确地构建出来,永远也不会看到它在多个线程之中处于不一致的状态。多线程环境下,应当尽量使对象成为不可变,来满足线程安全。 + +不可变的类型: + +- final 关键字修饰的基本数据类型 +- String +- 枚举类型 +- Number 部分子类,如 Long 和 Double 等数值包装类型,BigInteger 和 BigDecimal 等大数据类型。但同为 Number 的原子类 AtomicInteger 和 AtomicLong 则是可变的。 + +对于集合类型,可以使用 Collections.unmodifiableXXX() 方法来获取一个不可变的集合。 + +```java +public class ImmutableExample { + public static void main(String[] args) { + Map map = new HashMap<>(); + Map unmodifiableMap = Collections.unmodifiableMap(map); + unmodifiableMap.put("a", 1); + } +} +``` + +```html +Exception in thread "main" java.lang.UnsupportedOperationException + at java.util.Collections$UnmodifiableMap.put(Collections.java:1457) + at ImmutableExample.main(ImmutableExample.java:9) +``` + +Collections.unmodifiableXXX() 先对原始的集合进行拷贝,需要对集合进行修改的方法都直接抛出异常。 + +```java +public V put(K key, V value) { + throw new UnsupportedOperationException(); +} +``` + +## 3 无同步方案 + +要保证线程安全,并不是一定就要进行同步。如果一个方法本来就不涉及共享数据,那它自然就无须任何同步措施去保证正确性。 + +### 3.1 栈封闭 + +多个线程访问同一个方法的局部变量时,不会出现线程安全问题,因为局部变量存储在虚拟机栈中,属于线程私有的。 + +```java +public class StackClosedExample { + public void add100() { + int cnt = 0; + for (int i = 0; i < 100; i++) { + cnt++; + } + System.out.println(cnt); + } +} +``` + +```java +public static void main(String[] args) { + StackClosedExample example = new StackClosedExample(); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.execute(() -> example.add100()); + executorService.execute(() -> example.add100()); + executorService.shutdown(); +} +``` + +```html +100 +100 +``` + +### 3.2 线程本地存储(Thread Local Storage) + +如果一段代码中所需要的数据必须与其他代码共享,那就看看这些共享数据的代码是否能保证在同一个线程中执行。如果能保证,我们就可以把共享数据的可见范围限制在同一个线程之内,这样,无须同步也能保证线程之间不出现数据争用的问题。 + +符合这种特点的应用并不少见,大部分使用消费队列的架构模式(如“生产者-消费者”模式)都会将产品的消费过程尽量在一个线程中消费完。其中最重要的一个应用实例就是经典 Web 交互模型中的“一个请求对应一个服务器线程”(Thread-per-Request)的处理方式,这种处理方式的广泛应用使得很多 Web 服务端应用都可以使用线程本地存储来解决线程安全问题。 + +可以使用 java.lang.ThreadLocal 类来实现线程本地存储功能。 + +对于以下代码,thread1 中设置 threadLocal 为 1,而 thread2 设置 threadLocal 为 2。过了一段时间之后,thread1 读取 threadLocal 依然是 1,不受 thread2 的影响。 + +```java +public class ThreadLocalExample { + public static void main(String[] args) { + ThreadLocal threadLocal = new ThreadLocal(); + Thread thread1 = new Thread(() -> { + threadLocal.set(1); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println(threadLocal.get()); + threadLocal.remove(); + }); + Thread thread2 = new Thread(() -> { + threadLocal.set(2); + threadLocal.remove(); + }); + thread1.start(); + thread2.start(); + } +} +``` + +```html +1 +``` + +为了理解 ThreadLocal,先看以下代码: + +```java +public class ThreadLocalExample1 { + public static void main(String[] args) { + ThreadLocal threadLocal1 = new ThreadLocal(); + ThreadLocal threadLocal2 = new ThreadLocal(); + Thread thread1 = new Thread(() -> { + threadLocal1.set(1); + threadLocal2.set(1); + }); + Thread thread2 = new Thread(() -> { + threadLocal1.set(2); + threadLocal2.set(2); + }); + thread1.start(); + thread2.start(); + } +} +``` + +它所对应的底层结构图为: + +![](image/2022-12-19-11-10-40.png) + +每个 Thread 都有一个 ThreadLocal.ThreadLocalMap 对象。 + +```java +/* ThreadLocal values pertaining to this thread. This map is maintained + * by the ThreadLocal class. */ +ThreadLocal.ThreadLocalMap threadLocals = null; +``` + +当调用一个 ThreadLocal 的 set(T value) 方法时,先得到当前线程的 ThreadLocalMap 对象,然后将 ThreadLocal-\>value 键值对插入到该 Map 中。 + +```java +public void set(T value) { + Thread t = Thread.currentThread(); + ThreadLocalMap map = getMap(t); + if (map != null) + map.set(this, value); + else + createMap(t, value); +} +``` + +get() 方法类似。 + +```java +public T get() { + Thread t = Thread.currentThread(); + ThreadLocalMap map = getMap(t); + if (map != null) { + ThreadLocalMap.Entry e = map.getEntry(this); + if (e != null) { + @SuppressWarnings("unchecked") + T result = (T)e.value; + return result; + } + } + return setInitialValue(); +} +``` + +ThreadLocal 从理论上讲并不是用来解决多线程并发问题的,因为根本不存在多线程竞争。 + +在一些场景 (尤其是使用线程池) 下,由于 ThreadLocal.ThreadLocalMap 的底层数据结构导致 ThreadLocal 有内存泄漏的情况,应该尽可能在每次使用 ThreadLocal 后手动调用 remove(),以避免出现 ThreadLocal 经典的内存泄漏甚至是造成自身业务混乱的风险。 + +### 3.3 可重入代码(Reentrant Code) + +这种代码也叫做纯代码(Pure Code),可以在代码执行的任何时刻中断它,转而去执行另外一段代码(包括递归调用它本身),而在控制权返回后,原来的程序不会出现任何错误。 + +可重入代码有一些共同的特征,例如不依赖存储在堆上的数据和公用的系统资源、用到的状态量都由参数中传入、不调用非可重入的方法等。 + + +A Stateless Servlet + +```java +public class StatelessFactorizer implements Servlet +{ + public void service(ServletRequest req, ServletResponse resp) + { + BigInteger i = extractFromRequest(req); + BigInteger[] factors = factor(i); + encodeIntoResponse(resp, factors); + } +} +``` + + + +## 4 互斥同步 + +悲观同步,损失性能 + +### 4.1 synchronized 和 ReentrantLock。 + +### 4.2 Object.wait/notify + +### 4.3 Condition.await/signal + +## 5 非阻塞同步 + +互斥同步最主要的问题就是线程阻塞和唤醒所带来的性能问题,因此这种同步也称为阻塞同步。 + +互斥同步属于一种悲观的并发策略,总是认为只要不去做正确的同步措施,那就肯定会出现问题。无论共享数据是否真的会出现竞争,它都要进行加锁(这里讨论的是概念模型,实际上虚拟机会优化掉很大一部分不必要的加锁)、用户态核心态转换、维护锁计数器和检查是否有被阻塞的线程需要唤醒等操作。 + +随着硬件指令集的发展,我们可以使用基于冲突检测的乐观并发策略:先进行操作,如果没有其它线程争用共享数据,那操作就成功了,否则采取补偿措施(不断地重试,直到成功为止)。这种乐观的并发策略的许多实现都不需要将线程阻塞,因此这种同步操作称为非阻塞同步。 + +### 5.1 CAS(Compare and Swap Algorithm) + +乐观锁需要操作和冲突检测这两个步骤具备原子性,这里就不能再使用互斥同步来保证了,只能靠硬件来完成。硬件支持的原子性操作最典型的是:比较并交换(Compare-and-Swap,CAS)。CAS 指令需要有 3 个操作数,分别是 +* 内存地址 V、 +* 旧的预期值 A +* 新值 B。 + +当执行操作时,只有当 V 的值等于 A,才将 V 的值更新为 B。 + +让我们通过一个例子来了解整个过程。 假设V是存储值“ 10”的存储位置。 有多个线程想要递增此值并将递增的值用于其他操作,这是一种非常实际的方案。 让我们分步分解整个CAS操作: + +1. 线程1和2想要增加它,它们都读取值并将其增加到11。 +``` +V = 10, A = 0, B = 0 +``` +2. 现在线程1首先出现,并将V与它的最后一个读取值进行比较: +``` +V = 10, A = 10, B = 11 + +if A = V + V = B + else + operation failed + return V +显然,V的值将被覆盖为11,即操作成功。 +``` +3. 线程2到来并尝试与线程1相同的操作 +``` +V = 11, A = 10, B = 11 + +if A = V + V = B + else + operation failed + return V +``` +4. 在这种情况下,V不等于A,因此不替换值,并返回V的当前值,即11。 现在,线程2再次使用值重试此操作: +``` +V = 11, A = 11, B = 12 +``` + +而这一次,条件得到满足,增量值12返回线程2。 + +总而言之,当多个线程尝试使用CAS同时更新同一变量时,一个将获胜并更新该变量的值,而其余则将丢失。 但是失败者并不会因为线程中断而受到惩罚。 他们可以自由地重试该操作,或者什么也不做。 + + +### 5.2 AtomicInteger + +J.U.C 包里面的整数原子类 AtomicInteger 的方法调用了 Unsafe 类的 CAS 操作。 + +以下代码使用了 AtomicInteger 执行了自增的操作。 + +```java +private AtomicInteger cnt = new AtomicInteger(); + +public void add() { + cnt.incrementAndGet(); +} +``` + +以下代码是 incrementAndGet() 的源码,它调用了 Unsafe 的 getAndAddInt() 。 + +```java +public final int incrementAndGet() { + return unsafe.getAndAddInt(this, valueOffset, 1) + 1; +} +``` + +以下代码是 getAndAddInt() 源码,var1 指示对象内存地址,var2 指示该字段相对对象内存地址的偏移,var4 指示操作需要加的数值,这里为 1。通过 getIntVolatile(var1, var2) 得到旧的预期值,通过调用 compareAndSwapInt() 来进行 CAS 比较,如果该字段内存地址中的值等于 var5,那么就更新内存地址为 var1+var2 的变量为 var5+var4。 + +可以看到 getAndAddInt() 在一个循环中进行,发生冲突的做法是不断的进行重试。 + +```java +public final int getAndAddInt(Object var1, long var2, int var4) { + int var5; + do { + var5 = this.getIntVolatile(var1, var2); + } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4)); + + return var5; +} +``` + +### 5.3 ABA + +如果一个变量初次读取的时候是 A 值,它的值被改成了 B,后来又被改回为 A,那 CAS 操作就会误认为它从来没有被改变过。 + +J.U.C 包提供了一个带有标记的原子引用类 AtomicStampedReference 来解决这个问题,它可以通过控制变量值的版本来保证 CAS 的正确性。大部分情况下 ABA 问题不会影响程序并发的正确性,如果需要解决 ABA 问题,改用传统的互斥同步可能会比原子类更高效。 diff --git a/Java基础教程/Java并发编程/07 Java内存模型.md b/Java基础教程/Java并发编程/07 Java内存模型.md new file mode 100644 index 00000000..ad56779d --- /dev/null +++ b/Java基础教程/Java并发编程/07 Java内存模型.md @@ -0,0 +1,211 @@ +# 内存模型 + + +## 1 Java 内存模型 + +Java 内存模型试图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。 + +### 主内存与工作内存 + +处理器上的寄存器的读写的速度比内存快几个数量级,为了解决这种速度矛盾,在它们之间加入了高速缓存。 + +加入高速缓存带来了一个新的问题:缓存一致性。如果多个缓存共享同一块主内存区域,那么多个缓存的数据可能会不一致,需要一些协议来解决这个问题。 + +![](image/2022-12-16-18-02-06.png) + +所有的变量都存储在主内存中,每个线程还有自己的工作内存,工作内存存储在高速缓存或者寄存器中,保存了该线程使用的变量的主内存副本拷贝。 + +线程只能直接操作工作内存中的变量,不同线程之间的变量值传递需要通过主内存来完成。 + +![](image/2022-12-16-19-59-39.png) + +### 内存间交互操作 + +Java 内存模型定义了 8 个操作来完成主内存和工作内存的交互操作。 + +![](image/2022-12-16-19-59-48.png) + +- read:把一个变量的值从主内存传输到工作内存中 +- load:在 read 之后执行,把 read 得到的值放入工作内存的变量副本中 +- use:把工作内存中一个变量的值传递给执行引擎 +- assign:把一个从执行引擎接收到的值赋给工作内存的变量 +- store:把工作内存的一个变量的值传送到主内存中 +- write:在 store 之后执行,把 store 得到的值放入主内存的变量中 +- lock:作用于主内存的变量 +- unlock + +## 2 内存模型三大特性 + +### 1 原子性 + +Java 内存模型保证了 read、load、use、assign、store、write、lock 和 unlock 操作具有原子性,例如对一个 int 类型的变量执行 assign 赋值操作,这个操作就是原子性的。但是 Java 内存模型允许虚拟机将没有被 volatile 修饰的 64 位数据(long,double)的读写操作划分为两次 32 位的操作来进行,即 load、store、read 和 write 操作可以不具备原子性。 + +有一个错误认识就是,int 等原子性的类型在多线程环境中不会出现线程安全问题。前面的线程不安全示例代码中,cnt 属于 int 类型变量,1000 个线程对它进行自增操作之后,得到的值为 997 而不是 1000。 + +为了方便讨论,将内存间的交互操作简化为 3 个:load、assign、store。 + +下图演示了两个线程同时对 cnt 进行操作,load、assign、store 这一系列操作整体上看不具备原子性,那么在 T1 修改 cnt 并且还没有将修改后的值写入主内存,T2 依然可以读入旧值。可以看出,这两个线程虽然执行了两次自增运算,但是主内存中 cnt 的值最后为 1 而不是 2。因此对 int 类型读写操作满足原子性只是说明 load、assign、store 这些单个操作具备原子性。 + +

+ +AtomicInteger 能保证多个线程修改的原子性。 + +

+ +使用 AtomicInteger 重写之前线程不安全的代码之后得到以下线程安全实现: + +```java +public class AtomicExample { + private AtomicInteger cnt = new AtomicInteger(); + + public void add() { + cnt.incrementAndGet(); + } + + public int get() { + return cnt.get(); + } +} +``` + +```java +public static void main(String[] args) throws InterruptedException { + final int threadSize = 1000; + AtomicExample example = new AtomicExample(); // 只修改这条语句 + final CountDownLatch countDownLatch = new CountDownLatch(threadSize); + ExecutorService executorService = Executors.newCachedThreadPool(); + for (int i = 0; i < threadSize; i++) { + executorService.execute(() -> { + example.add(); + countDownLatch.countDown(); + }); + } + countDownLatch.await(); + executorService.shutdown(); + System.out.println(example.get()); +} +``` + +```html +1000 +``` + +除了使用原子类之外,也可以使用 synchronized 互斥锁来保证操作的原子性。它对应的内存间交互操作为:lock 和 unlock,在虚拟机实现上对应的字节码指令为 monitorenter 和 monitorexit。 + +```java +public class AtomicSynchronizedExample { + private int cnt = 0; + + public synchronized void add() { + cnt++; + } + + public synchronized int get() { + return cnt; + } +} +``` + +```java +public static void main(String[] args) throws InterruptedException { + final int threadSize = 1000; + AtomicSynchronizedExample example = new AtomicSynchronizedExample(); + final CountDownLatch countDownLatch = new CountDownLatch(threadSize); + ExecutorService executorService = Executors.newCachedThreadPool(); + for (int i = 0; i < threadSize; i++) { + executorService.execute(() -> { + example.add(); + countDownLatch.countDown(); + }); + } + countDownLatch.await(); + executorService.shutdown(); + System.out.println(example.get()); +} +``` + +```html +1000 +``` + +### 2. 可见性 + +可见性指当一个线程修改了共享变量的值,其它线程能够立即得知这个修改。Java 内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值来实现可见性的。 + +主要有三种实现可见性的方式: + +- volatile +- synchronized,对一个变量执行 unlock 操作之前,必须把变量值同步回主内存。 +- final,被 final 关键字修饰的字段在构造器中一旦初始化完成,并且没有发生 this 逃逸(其它线程通过 this 引用访问到初始化了一半的对象),那么其它线程就能看见 final 字段的值。 + +对前面的线程不安全示例中的 cnt 变量使用 volatile 修饰,不能解决线程不安全问题,因为 volatile 并不能保证操作的原子性。 + +### 3. 有序性 + +有序性是指:在本线程内观察,所有操作都是有序的。在一个线程观察另一个线程,所有操作都是无序的,无序是因为发生了指令重排序。在 Java 内存模型中,允许编译器和处理器对指令进行重排序,重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。 + +volatile 关键字通过添加内存屏障的方式来禁止指令重排,即重排序时不能把后面的指令放到内存屏障之前。 + +也可以通过 synchronized 来保证有序性,它保证每个时刻只有一个线程执行同步代码,相当于是让线程顺序执行同步代码。 + +## 3 先行发生原则 + +上面提到了可以用 volatile 和 synchronized 来保证有序性。除此之外,JVM 还规定了先行发生原则,让一个操作无需控制就能先于另一个操作完成。 + +### 1. 单一线程原则 + +> Single Thread rule + +在一个线程内,在程序前面的操作先行发生于后面的操作。 + +![](image/2022-12-16-20-01-57.png) + +### 2. 管程锁定规则 + +> Monitor Lock Rule + +一个 unlock 操作先行发生于后面对同一个锁的 lock 操作。 + +![](image/2022-12-16-20-02-05.png) + +### 3. volatile 变量规则 + +> Volatile Variable Rule + +对一个 volatile 变量的写操作先行发生于后面对这个变量的读操作。 + +![](image/2022-12-16-20-02-13.png) + +### 4. 线程启动规则 + +> Thread Start Rule + +Thread 对象的 start() 方法调用先行发生于此线程的每一个动作。 + +![](image/2022-12-16-20-02-23.png) + +### 5. 线程加入规则 + +> Thread Join Rule + +Thread 对象的结束先行发生于 join() 方法返回。 + +![](image/2022-12-16-20-02-33.png) + +### 6. 线程中断规则 + +> Thread Interruption Rule + +对线程 interrupt() 方法的调用先行发生于被中断线程的代码检测到中断事件的发生,可以通过 interrupted() 方法检测到是否有中断发生。 + +### 7. 对象终结规则 + +> Finalizer Rule + +一个对象的初始化完成(构造函数执行结束)先行发生于它的 finalize() 方法的开始。 + +### 8. 传递性 + +> Transitivity + +如果操作 A 先行发生于操作 B,操作 B 先行发生于操作 C,那么操作 A 先行发生于操作 C。 \ No newline at end of file diff --git a/Java基础教程/Java并发编程/08 Java锁优化.md b/Java基础教程/Java并发编程/08 Java锁优化.md new file mode 100644 index 00000000..b772ed2f --- /dev/null +++ b/Java基础教程/Java并发编程/08 Java锁优化.md @@ -0,0 +1,113 @@ + +## 1 锁优化 + +这里的锁优化主要是指 JVM 对 synchronized 的优化。 + +### 自旋锁 + +互斥同步进入阻塞状态的开销都很大,应该尽量避免。在许多应用中,共享数据的锁定状态只会持续很短的一段时间。自旋锁的思想是让一个线程在请求一个共享数据的锁时执行忙循环(自旋)一段时间,如果在这段时间内能获得锁,就可以避免进入阻塞状态。 + +自旋锁虽然能避免进入阻塞状态从而减少开销,但是它需要进行忙循环操作占用 CPU 时间,它只适用于共享数据的锁定状态很短的场景。 + +在 JDK 1.6 中引入了自适应的自旋锁。自适应意味着自旋的次数不再固定了,而是由前一次在同一个锁上的自旋次数及锁的拥有者的状态来决定。 + +### 锁消除 + +锁消除是指对于被检测出不可能存在竞争的共享数据的锁进行消除。 + +锁消除主要是通过逃逸分析来支持,如果堆上的共享数据不可能逃逸出去被其它线程访问到,那么就可以把它们当成私有数据对待,也就可以将它们的锁进行消除。 + +对于一些看起来没有加锁的代码,其实隐式的加了很多锁。例如下面的字符串拼接代码就隐式加了锁: + +```java +public static String concatString(String s1, String s2, String s3) { + return s1 + s2 + s3; +} +``` + +String 是一个不可变的类,编译器会对 String 的拼接自动优化。在 JDK 1.5 之前,会转化为 StringBuffer 对象的连续 append() 操作: + +```java +public static String concatString(String s1, String s2, String s3) { + StringBuffer sb = new StringBuffer(); + sb.append(s1); + sb.append(s2); + sb.append(s3); + return sb.toString(); +} +``` + +每个 append() 方法中都有一个同步块。虚拟机观察变量 sb,很快就会发现它的动态作用域被限制在 concatString() 方法内部。也就是说,sb 的所有引用永远不会逃逸到 concatString() 方法之外,其他线程无法访问到它,因此可以进行消除。 + +### 锁粗化 + +如果一系列的连续操作都对同一个对象反复加锁和解锁,频繁的加锁操作就会导致性能损耗。 + +上一节的示例代码中连续的 append() 方法就属于这类情况。如果虚拟机探测到由这样的一串零碎的操作都对同一个对象加锁,将会把加锁的范围扩展(粗化)到整个操作序列的外部。对于上一节的示例代码就是扩展到第一个 append() 操作之前直至最后一个 append() 操作之后,这样只需要加锁一次就可以了。 + +### 轻量级锁 + +JDK 1.6 引入了偏向锁和轻量级锁,从而让锁拥有了四个状态:无锁状态(unlocked)、偏向锁状态(biasble)、轻量级锁状态(lightweight locked)和重量级锁状态(inflated)。 + +以下是 HotSpot 虚拟机对象头的内存布局,这些数据被称为 Mark Word。其中 tag bits 对应了五个状态,这些状态在右侧的 state 表格中给出。除了 marked for gc 状态,其它四个状态已经在前面介绍过了。 + +![](image/2022-12-16-20-24-02.png) + +下图左侧是一个线程的虚拟机栈,其中有一部分称为 Lock Record 的区域,这是在轻量级锁运行过程创建的,用于存放锁对象的 Mark Word。而右侧就是一个锁对象,包含了 Mark Word 和其它信息。 + +![](image/2022-12-16-20-24-06.png) + +轻量级锁是相对于传统的重量级锁而言,它使用 CAS 操作来避免重量级锁使用互斥量的开销。对于绝大部分的锁,在整个同步周期内都是不存在竞争的,因此也就不需要都使用互斥量进行同步,可以先采用 CAS 操作进行同步,如果 CAS 失败了再改用互斥量进行同步。 + +当尝试获取一个锁对象时,如果锁对象标记为 0 01,说明锁对象的锁未锁定(unlocked)状态。此时虚拟机在当前线程的虚拟机栈中创建 Lock Record,然后使用 CAS 操作将对象的 Mark Word 更新为 Lock Record 指针。如果 CAS 操作成功了,那么线程就获取了该对象上的锁,并且对象的 Mark Word 的锁标记变为 00,表示该对象处于轻量级锁状态。 + +![](image/2022-12-16-20-24-10.png) + +如果 CAS 操作失败了,虚拟机首先会检查对象的 Mark Word 是否指向当前线程的虚拟机栈,如果是的话说明当前线程已经拥有了这个锁对象,那就可以直接进入同步块继续执行,否则说明这个锁对象已经被其他线程线程抢占了。如果有两条以上的线程争用同一个锁,那轻量级锁就不再有效,要膨胀为重量级锁。 + +### 偏向锁 + +偏向锁的思想是偏向于让第一个获取锁对象的线程,这个线程在之后获取该锁就不再需要进行同步操作,甚至连 CAS 操作也不再需要。 + +当锁对象第一次被线程获得的时候,进入偏向状态,标记为 1 01。同时使用 CAS 操作将线程 ID 记录到 Mark Word 中,如果 CAS 操作成功,这个线程以后每次进入这个锁相关的同步块就不需要再进行任何同步操作。 + +当有另外一个线程去尝试获取这个锁对象时,偏向状态就宣告结束,此时撤销偏向(Revoke Bias)后恢复到未锁定状态或者轻量级锁状态。 + +![](image/2022-12-16-20-24-15.png) + +## 2 多线程开发良好的实践 + +- 给线程起个有意义的名字,这样可以方便找 Bug。 + +- 缩小同步范围,从而减少锁争用。例如对于 synchronized,应该尽量使用同步块而不是同步方法。 + +- 多用同步工具少用 wait() 和 notify()。首先,CountDownLatch, CyclicBarrier, Semaphore 和 Exchanger 这些同步类简化了编码操作,而用 wait() 和 notify() 很难实现复杂控制流;其次,这些同步类是由最好的企业编写和维护,在后续的 JDK 中还会不断优化和完善。 + +- 使用 BlockingQueue 实现生产者消费者问题。 + +- 多用并发集合少用同步集合,例如应该使用 ConcurrentHashMap 而不是 Hashtable。 + +- 使用本地变量和不可变类来保证线程安全。 + +- 使用线程池而不是直接创建线程,这是因为创建线程代价很高,线程池可以有效地利用有限的线程来启动任务。 + +## 参考资料 + +- BruceEckel. Java 编程思想: 第 4 版 [M]. 机械工业出版社, 2007. +- 周志明. 深入理解 Java 虚拟机 [M]. 机械工业出版社, 2011. +- [Threads and Locks](https://docs.oracle.com/javase/specs/jvms/se6/html/Threads.doc.html) +- [线程通信](http://ifeve.com/thread-signaling/#missed_signal) +- [Java 线程面试题 Top 50](http://www.importnew.com/12773.html) +- [BlockingQueue](http://tutorials.jenkov.com/java-util-concurrent/blockingqueue.html) +- [thread state java](https://stackoverflow.com/questions/11265289/thread-state-java) +- [CSC 456 Spring 2012/ch7 MN](http://wiki.expertiza.ncsu.edu/index.php/CSC_456_Spring_2012/ch7_MN) +- [Java - Understanding Happens-before relationship](https://www.logicbig.com/tutorials/core-java-tutorial/java-multi-threading/happens-before.html) +- [6장 Thread Synchronization](https://www.slideshare.net/novathinker/6-thread-synchronization) +- [How is Java's ThreadLocal implemented under the hood?](https://stackoverflow.com/questions/1202444/how-is-javas-threadlocal-implemented-under-the-hood/15653015) +- [Concurrent](https://sites.google.com/site/webdevelopart/21-compile/06-java/javase/concurrent?tmpl=%2Fsystem%2Fapp%2Ftemplates%2Fprint%2F&showPrintDialog=1) +- [JAVA FORK JOIN EXAMPLE](http://www.javacreed.com/java-fork-join-example/ "Java Fork Join Example") +- [聊聊并发(八)——Fork/Join 框架介绍](http://ifeve.com/talk-concurrency-forkjoin/) +- [Eliminating SynchronizationRelated Atomic Operations with Biased Locking and Bulk Rebiasing](http://www.oracle.com/technetwork/java/javase/tech/biasedlocking-oopsla2006-preso-150106.pdf) + + +## 死锁问题 \ No newline at end of file diff --git a/Java基础教程/Java并发编程/Java 并发.md b/Java基础教程/Java并发编程/Java 并发.md deleted file mode 100644 index cb011950..00000000 --- a/Java基础教程/Java并发编程/Java 并发.md +++ /dev/null @@ -1,1636 +0,0 @@ -# Java 并发 - -* [Java 并发](#java-并发) - * [一、使用线程](#一使用线程) - * [实现 Runnable 接口](#实现-runnable-接口) - * [实现 Callable 接口](#实现-callable-接口) - * [继承 Thread 类](#继承-thread-类) - * [实现接口 VS 继承 Thread](#实现接口-vs-继承-thread) - * [二、基础线程机制](#二基础线程机制) - * [Executor](#executor) - * [Daemon](#daemon) - * [sleep()](#sleep) - * [yield()](#yield) - * [三、中断](#三中断) - * [InterruptedException](#interruptedexception) - * [interrupted()](#interrupted) - * [Executor 的中断操作](#executor-的中断操作) - * [四、互斥同步](#四互斥同步) - * [synchronized](#synchronized) - * [ReentrantLock](#reentrantlock) - * [比较](#比较) - * [使用选择](#使用选择) - * [五、线程之间的协作](#五线程之间的协作) - * [join()](#join) - * [wait() notify() notifyAll()](#wait-notify-notifyall) - * [await() signal() signalAll()](#await-signal-signalall) - * [六、线程状态](#六线程状态) - * [新建(NEW)](#新建new) - * [可运行(RUNABLE)](#可运行runable) - * [阻塞(BLOCKED)](#阻塞blocked) - * [无限期等待(WAITING)](#无限期等待waiting) - * [限期等待(TIMED_WAITING)](#限期等待timed_waiting) - * [死亡(TERMINATED)](#死亡terminated) - * [七、J.U.C - AQS](#七juc---aqs) - * [CountDownLatch](#countdownlatch) - * [CyclicBarrier](#cyclicbarrier) - * [Semaphore](#semaphore) - * [八、J.U.C - 其它组件](#八juc---其它组件) - * [FutureTask](#futuretask) - * [BlockingQueue](#blockingqueue) - * [ForkJoin](#forkjoin) - * [九、线程不安全示例](#九线程不安全示例) - * [十、Java 内存模型](#十java-内存模型) - * [主内存与工作内存](#主内存与工作内存) - * [内存间交互操作](#内存间交互操作) - * [内存模型三大特性](#内存模型三大特性) - * [先行发生原则](#先行发生原则) - * [十一、线程安全](#十一线程安全) - * [不可变](#不可变) - * [互斥同步](#互斥同步) - * [非阻塞同步](#非阻塞同步) - * [无同步方案](#无同步方案) - * [十二、锁优化](#十二锁优化) - * [自旋锁](#自旋锁) - * [锁消除](#锁消除) - * [锁粗化](#锁粗化) - * [轻量级锁](#轻量级锁) - * [偏向锁](#偏向锁) - * [十三、多线程开发良好的实践](#十三多线程开发良好的实践) - * [参考资料](#参考资料) - - - - -## 一、使用线程 - -有三种使用线程的方法: - -- 实现 Runnable 接口; -- 实现 Callable 接口; -- 继承 Thread 类。 - -实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以理解为任务是通过线程驱动从而执行的。 - -### 实现 Runnable 接口 - -需要实现接口中的 run() 方法。 - -```java -public class MyRunnable implements Runnable { - @Override - public void run() { - // ... - } -} -``` - -使用 Runnable 实例再创建一个 Thread 实例,然后调用 Thread 实例的 start() 方法来启动线程。 - -```java -public static void main(String[] args) { - MyRunnable instance = new MyRunnable(); - Thread thread = new Thread(instance); - thread.start(); -} -``` - -### 实现 Callable 接口 - -与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。 - -```java -public class MyCallable implements Callable { - public Integer call() { - return 123; - } -} -``` - -```java -public static void main(String[] args) throws ExecutionException, InterruptedException { - MyCallable mc = new MyCallable(); - FutureTask ft = new FutureTask<>(mc); - Thread thread = new Thread(ft); - thread.start(); - System.out.println(ft.get()); -} -``` - -### 继承 Thread 类 - -同样也是需要实现 run() 方法,因为 Thread 类也实现了 Runable 接口。 - -当调用 start() 方法启动一个线程时,虚拟机会将该线程放入就绪队列中等待被调度,当一个线程被调度时会执行该线程的 run() 方法。 - -```java -public class MyThread extends Thread { - public void run() { - // ... - } -} -``` - -```java -public static void main(String[] args) { - MyThread mt = new MyThread(); - mt.start(); -} -``` - -### 实现接口 VS 继承 Thread - -实现接口会更好一些,因为: - -- Java 不支持多重继承,因此继承了 Thread 类就无法继承其它类,但是可以实现多个接口; -- 类可能只要求可执行就行,继承整个 Thread 类开销过大。 - -## 二、基础线程机制 - -### Executor - -Executor 管理多个异步任务的执行,而无需程序员显式地管理线程的生命周期。这里的异步是指多个任务的执行互不干扰,不需要进行同步操作。 - -主要有三种 Executor: - -- CachedThreadPool:一个任务创建一个线程; -- FixedThreadPool:所有任务只能使用固定大小的线程; -- SingleThreadExecutor:相当于大小为 1 的 FixedThreadPool。 - -```java -public static void main(String[] args) { - ExecutorService executorService = Executors.newCachedThreadPool(); - for (int i = 0; i < 5; i++) { - executorService.execute(new MyRunnable()); - } - executorService.shutdown(); -} -``` - -### Daemon - -守护线程是程序运行时在后台提供服务的线程,不属于程序中不可或缺的部分。 - -当所有非守护线程结束时,程序也就终止,同时会杀死所有守护线程。 - -main() 属于非守护线程。 - -在线程启动之前使用 setDaemon() 方法可以将一个线程设置为守护线程。 - -```java -public static void main(String[] args) { - Thread thread = new Thread(new MyRunnable()); - thread.setDaemon(true); -} -``` - -### sleep() - -Thread.sleep(millisec) 方法会休眠当前正在执行的线程,millisec 单位为毫秒。 - -sleep() 可能会抛出 InterruptedException,因为异常不能跨线程传播回 main() 中,因此必须在本地进行处理。线程中抛出的其它异常也同样需要在本地进行处理。 - -```java -public void run() { - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - e.printStackTrace(); - } -} -``` - -### yield() - -对静态方法 Thread.yield() 的调用声明了当前线程已经完成了生命周期中最重要的部分,可以切换给其它线程来执行。该方法只是对线程调度器的一个建议,而且也只是建议具有相同优先级的其它线程可以运行。 - -```java -public void run() { - Thread.yield(); -} -``` - -## 三、中断 - -一个线程执行完毕之后会自动结束,如果在运行过程中发生异常也会提前结束。 - -### InterruptedException - -通过调用一个线程的 interrupt() 来中断该线程,如果该线程处于阻塞、限期等待或者无限期等待状态,那么就会抛出 InterruptedException,从而提前结束该线程。但是不能中断 I/O 阻塞和 synchronized 锁阻塞。 - -对于以下代码,在 main() 中启动一个线程之后再中断它,由于线程中调用了 Thread.sleep() 方法,因此会抛出一个 InterruptedException,从而提前结束线程,不执行之后的语句。 - -```java -public class InterruptExample { - - private static class MyThread1 extends Thread { - @Override - public void run() { - try { - Thread.sleep(2000); - System.out.println("Thread run"); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } -} -``` - -```java -public static void main(String[] args) throws InterruptedException { - Thread thread1 = new MyThread1(); - thread1.start(); - thread1.interrupt(); - System.out.println("Main run"); -} -``` - -```html -Main run -java.lang.InterruptedException: sleep interrupted - at java.lang.Thread.sleep(Native Method) - at InterruptExample.lambda$main$0(InterruptExample.java:5) - at InterruptExample$$Lambda$1/713338599.run(Unknown Source) - at java.lang.Thread.run(Thread.java:745) -``` - -### interrupted() - -如果一个线程的 run() 方法执行一个无限循环,并且没有执行 sleep() 等会抛出 InterruptedException 的操作,那么调用线程的 interrupt() 方法就无法使线程提前结束。 - -但是调用 interrupt() 方法会设置线程的中断标记,此时调用 interrupted() 方法会返回 true。因此可以在循环体中使用 interrupted() 方法来判断线程是否处于中断状态,从而提前结束线程。 - -```java -public class InterruptExample { - - private static class MyThread2 extends Thread { - @Override - public void run() { - while (!interrupted()) { - // .. - } - System.out.println("Thread end"); - } - } -} -``` - -```java -public static void main(String[] args) throws InterruptedException { - Thread thread2 = new MyThread2(); - thread2.start(); - thread2.interrupt(); -} -``` - -```html -Thread end -``` - -### Executor 的中断操作 - -调用 Executor 的 shutdown() 方法会等待线程都执行完毕之后再关闭,但是如果调用的是 shutdownNow() 方法,则相当于调用每个线程的 interrupt() 方法。 - -以下使用 Lambda 创建线程,相当于创建了一个匿名内部线程。 - -```java -public static void main(String[] args) { - ExecutorService executorService = Executors.newCachedThreadPool(); - executorService.execute(() -> { - try { - Thread.sleep(2000); - System.out.println("Thread run"); - } catch (InterruptedException e) { - e.printStackTrace(); - } - }); - executorService.shutdownNow(); - System.out.println("Main run"); -} -``` - -```html -Main run -java.lang.InterruptedException: sleep interrupted - at java.lang.Thread.sleep(Native Method) - at ExecutorInterruptExample.lambda$main$0(ExecutorInterruptExample.java:9) - at ExecutorInterruptExample$$Lambda$1/1160460865.run(Unknown Source) - at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) - at java.lang.Thread.run(Thread.java:745) -``` - -如果只想中断 Executor 中的一个线程,可以通过使用 submit() 方法来提交一个线程,它会返回一个 Future\ 对象,通过调用该对象的 cancel(true) 方法就可以中断线程。 - -```java -Future future = executorService.submit(() -> { - // .. -}); -future.cancel(true); -``` - -## 四、互斥同步 - -Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLock。 - -### synchronized - -**1. 同步一个代码块** - -```java -public void func() { - synchronized (this) { - // ... - } -} -``` - -它只作用于同一个对象,如果调用两个对象上的同步代码块,就不会进行同步。 - -对于以下代码,使用 ExecutorService 执行了两个线程,由于调用的是同一个对象的同步代码块,因此这两个线程会进行同步,当一个线程进入同步语句块时,另一个线程就必须等待。 - -```java -public class SynchronizedExample { - - public void func1() { - synchronized (this) { - for (int i = 0; i < 10; i++) { - System.out.print(i + " "); - } - } - } -} -``` - -```java -public static void main(String[] args) { - SynchronizedExample e1 = new SynchronizedExample(); - ExecutorService executorService = Executors.newCachedThreadPool(); - executorService.execute(() -> e1.func1()); - executorService.execute(() -> e1.func1()); -} -``` - -```html -0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 -``` - -对于以下代码,两个线程调用了不同对象的同步代码块,因此这两个线程就不需要同步。从输出结果可以看出,两个线程交叉执行。 - -```java -public static void main(String[] args) { - SynchronizedExample e1 = new SynchronizedExample(); - SynchronizedExample e2 = new SynchronizedExample(); - ExecutorService executorService = Executors.newCachedThreadPool(); - executorService.execute(() -> e1.func1()); - executorService.execute(() -> e2.func1()); -} -``` - -```html -0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 -``` - - -**2. 同步一个方法** - -```java -public synchronized void func () { - // ... -} -``` - -它和同步代码块一样,作用于同一个对象。 - -**3. 同步一个类** - -```java -public void func() { - synchronized (SynchronizedExample.class) { - // ... - } -} -``` - -作用于整个类,也就是说两个线程调用同一个类的不同对象上的这种同步语句,也会进行同步。 - -```java -public class SynchronizedExample { - - public void func2() { - synchronized (SynchronizedExample.class) { - for (int i = 0; i < 10; i++) { - System.out.print(i + " "); - } - } - } -} -``` - -```java -public static void main(String[] args) { - SynchronizedExample e1 = new SynchronizedExample(); - SynchronizedExample e2 = new SynchronizedExample(); - ExecutorService executorService = Executors.newCachedThreadPool(); - executorService.execute(() -> e1.func2()); - executorService.execute(() -> e2.func2()); -} -``` - -```html -0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 -``` - -**4. 同步一个静态方法** - -```java -public synchronized static void fun() { - // ... -} -``` - -作用于整个类。 - -### ReentrantLock - -ReentrantLock 是 java.util.concurrent(J.U.C)包中的锁。 - -```java -public class LockExample { - - private Lock lock = new ReentrantLock(); - - public void func() { - lock.lock(); - try { - for (int i = 0; i < 10; i++) { - System.out.print(i + " "); - } - } finally { - lock.unlock(); // 确保释放锁,从而避免发生死锁。 - } - } -} -``` - -```java -public static void main(String[] args) { - LockExample lockExample = new LockExample(); - ExecutorService executorService = Executors.newCachedThreadPool(); - executorService.execute(() -> lockExample.func()); - executorService.execute(() -> lockExample.func()); -} -``` - -```html -0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 -``` - - -### 比较 - -**1. 锁的实现** - -synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 实现的。 - -**2. 性能** - -新版本 Java 对 synchronized 进行了很多优化,例如自旋锁等,synchronized 与 ReentrantLock 大致相同。 - -**3. 等待可中断** - -当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情。 - -ReentrantLock 可中断,而 synchronized 不行。 - -**4. 公平锁** - -公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁。 - -synchronized 中的锁是非公平的,ReentrantLock 默认情况下也是非公平的,但是也可以是公平的。 - -**5. 锁绑定多个条件** - -一个 ReentrantLock 可以同时绑定多个 Condition 对象。 - -### 使用选择 - -除非需要使用 ReentrantLock 的高级功能,否则优先使用 synchronized。这是因为 synchronized 是 JVM 实现的一种锁机制,JVM 原生地支持它,而 ReentrantLock 不是所有的 JDK 版本都支持。并且使用 synchronized 不用担心没有释放锁而导致死锁问题,因为 JVM 会确保锁的释放。 - -## 五、线程之间的协作 - -当多个线程可以一起工作去解决某个问题时,如果某些部分必须在其它部分之前完成,那么就需要对线程进行协调。 - -### join() - -在线程中调用另一个线程的 join() 方法,会将当前线程挂起,而不是忙等待,直到目标线程结束。 - -对于以下代码,虽然 b 线程先启动,但是因为在 b 线程中调用了 a 线程的 join() 方法,b 线程会等待 a 线程结束才继续执行,因此最后能够保证 a 线程的输出先于 b 线程的输出。 - -```java -public class JoinExample { - - private class A extends Thread { - @Override - public void run() { - System.out.println("A"); - } - } - - private class B extends Thread { - - private A a; - - B(A a) { - this.a = a; - } - - @Override - public void run() { - try { - a.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println("B"); - } - } - - public void test() { - A a = new A(); - B b = new B(a); - b.start(); - a.start(); - } -} -``` - -```java -public static void main(String[] args) { - JoinExample example = new JoinExample(); - example.test(); -} -``` - -``` -A -B -``` - -### wait() notify() notifyAll() - -调用 wait() 使得线程等待某个条件满足,线程在等待时会被挂起,当其他线程的运行使得这个条件满足时,其它线程会调用 notify() 或者 notifyAll() 来唤醒挂起的线程。 - -它们都属于 Object 的一部分,而不属于 Thread。 - -只能用在同步方法或者同步控制块中使用,否则会在运行时抛出 IllegalMonitorStateException。 - -使用 wait() 挂起期间,线程会释放锁。这是因为,如果没有释放锁,那么其它线程就无法进入对象的同步方法或者同步控制块中,那么就无法执行 notify() 或者 notifyAll() 来唤醒挂起的线程,造成死锁。 - -```java -public class WaitNotifyExample { - - public synchronized void before() { - System.out.println("before"); - notifyAll(); - } - - public synchronized void after() { - try { - wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println("after"); - } -} -``` - -```java -public static void main(String[] args) { - ExecutorService executorService = Executors.newCachedThreadPool(); - WaitNotifyExample example = new WaitNotifyExample(); - executorService.execute(() -> example.after()); - executorService.execute(() -> example.before()); -} -``` - -```html -before -after -``` - -**wait() 和 sleep() 的区别** - -- wait() 是 Object 的方法,而 sleep() 是 Thread 的静态方法; -- wait() 会释放锁,sleep() 不会。 - -### await() signal() signalAll() - -java.util.concurrent 类库中提供了 Condition 类来实现线程之间的协调,可以在 Condition 上调用 await() 方法使线程等待,其它线程调用 signal() 或 signalAll() 方法唤醒等待的线程。 - -相比于 wait() 这种等待方式,await() 可以指定等待的条件,因此更加灵活。 - -使用 Lock 来获取一个 Condition 对象。 - -```java -public class AwaitSignalExample { - - private Lock lock = new ReentrantLock(); - private Condition condition = lock.newCondition(); - - public void before() { - lock.lock(); - try { - System.out.println("before"); - condition.signalAll(); - } finally { - lock.unlock(); - } - } - - public void after() { - lock.lock(); - try { - condition.await(); - System.out.println("after"); - } catch (InterruptedException e) { - e.printStackTrace(); - } finally { - lock.unlock(); - } - } -} -``` - -```java -public static void main(String[] args) { - ExecutorService executorService = Executors.newCachedThreadPool(); - AwaitSignalExample example = new AwaitSignalExample(); - executorService.execute(() -> example.after()); - executorService.execute(() -> example.before()); -} -``` - -```html -before -after -``` - -## 六、线程状态 - -一个线程只能处于一种状态,并且这里的线程状态特指 Java 虚拟机的线程状态,不能反映线程在特定操作系统下的状态。 - -### 新建(NEW) - -创建后尚未启动。 - -### 可运行(RUNABLE) - -正在 Java 虚拟机中运行。但是在操作系统层面,它可能处于运行状态,也可能等待资源调度(例如处理器资源),资源调度完成就进入运行状态。所以该状态的可运行是指可以被运行,具体有没有运行要看底层操作系统的资源调度。 - -### 阻塞(BLOCKED) - -请求获取 monitor lock 从而进入 synchronized 函数或者代码块,但是其它线程已经占用了该 monitor lock,所以出于阻塞状态。要结束该状态进入从而 RUNABLE 需要其他线程释放 monitor lock。 - -### 无限期等待(WAITING) - -等待其它线程显式地唤醒。 - -阻塞和等待的区别在于,阻塞是被动的,它是在等待获取 monitor lock。而等待是主动的,通过调用 Object.wait() 等方法进入。 - -| 进入方法 | 退出方法 | -| --- | --- | -| 没有设置 Timeout 参数的 Object.wait() 方法 | Object.notify() / Object.notifyAll() | -| 没有设置 Timeout 参数的 Thread.join() 方法 | 被调用的线程执行完毕 | -| LockSupport.park() 方法 | LockSupport.unpark(Thread) | - -### 限期等待(TIMED_WAITING) - -无需等待其它线程显式地唤醒,在一定时间之后会被系统自动唤醒。 - -| 进入方法 | 退出方法 | -| --- | --- | -| Thread.sleep() 方法 | 时间结束 | -| 设置了 Timeout 参数的 Object.wait() 方法 | 时间结束 / Object.notify() / Object.notifyAll() | -| 设置了 Timeout 参数的 Thread.join() 方法 | 时间结束 / 被调用的线程执行完毕 | -| LockSupport.parkNanos() 方法 | LockSupport.unpark(Thread) | -| LockSupport.parkUntil() 方法 | LockSupport.unpark(Thread) | - -调用 Thread.sleep() 方法使线程进入限期等待状态时,常常用“使一个线程睡眠”进行描述。调用 Object.wait() 方法使线程进入限期等待或者无限期等待时,常常用“挂起一个线程”进行描述。睡眠和挂起是用来描述行为,而阻塞和等待用来描述状态。 - -### 死亡(TERMINATED) - -可以是线程结束任务之后自己结束,或者产生了异常而结束。 - -[Java SE 9 Enum Thread.State](https://docs.oracle.com/javase/9/docs/api/java/lang/Thread.State.html) - -## 七、J.U.C - AQS - -java.util.concurrent(J.U.C)大大提高了并发性能,AQS 被认为是 J.U.C 的核心。 - -### CountDownLatch - -用来控制一个或者多个线程等待多个线程。 - -维护了一个计数器 cnt,每次调用 countDown() 方法会让计数器的值减 1,减到 0 的时候,那些因为调用 await() 方法而在等待的线程就会被唤醒。 - -

- -```java -public class CountdownLatchExample { - - public static void main(String[] args) throws InterruptedException { - final int totalThread = 10; - CountDownLatch countDownLatch = new CountDownLatch(totalThread); - ExecutorService executorService = Executors.newCachedThreadPool(); - for (int i = 0; i < totalThread; i++) { - executorService.execute(() -> { - System.out.print("run.."); - countDownLatch.countDown(); - }); - } - countDownLatch.await(); - System.out.println("end"); - executorService.shutdown(); - } -} -``` - -```html -run..run..run..run..run..run..run..run..run..run..end -``` - -### CyclicBarrier - -用来控制多个线程互相等待,只有当多个线程都到达时,这些线程才会继续执行。 - -和 CountdownLatch 相似,都是通过维护计数器来实现的。线程执行 await() 方法之后计数器会减 1,并进行等待,直到计数器为 0,所有调用 await() 方法而在等待的线程才能继续执行。 - -CyclicBarrier 和 CountdownLatch 的一个区别是,CyclicBarrier 的计数器通过调用 reset() 方法可以循环使用,所以它才叫做循环屏障。 - -CyclicBarrier 有两个构造函数,其中 parties 指示计数器的初始值,barrierAction 在所有线程都到达屏障的时候会执行一次。 - -```java -public CyclicBarrier(int parties, Runnable barrierAction) { - if (parties <= 0) throw new IllegalArgumentException(); - this.parties = parties; - this.count = parties; - this.barrierCommand = barrierAction; -} - -public CyclicBarrier(int parties) { - this(parties, null); -} -``` - -

- -```java -public class CyclicBarrierExample { - - public static void main(String[] args) { - final int totalThread = 10; - CyclicBarrier cyclicBarrier = new CyclicBarrier(totalThread); - ExecutorService executorService = Executors.newCachedThreadPool(); - for (int i = 0; i < totalThread; i++) { - executorService.execute(() -> { - System.out.print("before.."); - try { - cyclicBarrier.await(); - } catch (InterruptedException | BrokenBarrierException e) { - e.printStackTrace(); - } - System.out.print("after.."); - }); - } - executorService.shutdown(); - } -} -``` - -```html -before..before..before..before..before..before..before..before..before..before..after..after..after..after..after..after..after..after..after..after.. -``` - -### Semaphore - -Semaphore 类似于操作系统中的信号量,可以控制对互斥资源的访问线程数。 - -以下代码模拟了对某个服务的并发请求,每次只能有 3 个客户端同时访问,请求总数为 10。 - -```java -public class SemaphoreExample { - - public static void main(String[] args) { - final int clientCount = 3; - final int totalRequestCount = 10; - Semaphore semaphore = new Semaphore(clientCount); - ExecutorService executorService = Executors.newCachedThreadPool(); - for (int i = 0; i < totalRequestCount; i++) { - executorService.execute(()->{ - try { - semaphore.acquire(); - System.out.print(semaphore.availablePermits() + " "); - } catch (InterruptedException e) { - e.printStackTrace(); - } finally { - semaphore.release(); - } - }); - } - executorService.shutdown(); - } -} -``` - -```html -2 1 2 2 2 2 2 1 2 2 -``` - -## 八、J.U.C - 其它组件 - -### FutureTask - -在介绍 Callable 时我们知道它可以有返回值,返回值通过 Future\ 进行封装。FutureTask 实现了 RunnableFuture 接口,该接口继承自 Runnable 和 Future\ 接口,这使得 FutureTask 既可以当做一个任务执行,也可以有返回值。 - -```java -public class FutureTask implements RunnableFuture -``` - -```java -public interface RunnableFuture extends Runnable, Future -``` - -FutureTask 可用于异步获取执行结果或取消执行任务的场景。当一个计算任务需要执行很长时间,那么就可以用 FutureTask 来封装这个任务,主线程在完成自己的任务之后再去获取结果。 - -```java -public class FutureTaskExample { - - public static void main(String[] args) throws ExecutionException, InterruptedException { - FutureTask futureTask = new FutureTask(new Callable() { - @Override - public Integer call() throws Exception { - int result = 0; - for (int i = 0; i < 100; i++) { - Thread.sleep(10); - result += i; - } - return result; - } - }); - - Thread computeThread = new Thread(futureTask); - computeThread.start(); - - Thread otherThread = new Thread(() -> { - System.out.println("other task is running..."); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - }); - otherThread.start(); - System.out.println(futureTask.get()); - } -} -``` - -```html -other task is running... -4950 -``` - -### BlockingQueue - -java.util.concurrent.BlockingQueue 接口有以下阻塞队列的实现: - -- **FIFO 队列** :LinkedBlockingQueue、ArrayBlockingQueue(固定长度) -- **优先级队列** :PriorityBlockingQueue - -提供了阻塞的 take() 和 put() 方法:如果队列为空 take() 将阻塞,直到队列中有内容;如果队列为满 put() 将阻塞,直到队列有空闲位置。 - -**使用 BlockingQueue 实现生产者消费者问题** - -```java -public class ProducerConsumer { - - private static BlockingQueue queue = new ArrayBlockingQueue<>(5); - - private static class Producer extends Thread { - @Override - public void run() { - try { - queue.put("product"); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.print("produce.."); - } - } - - private static class Consumer extends Thread { - - @Override - public void run() { - try { - String product = queue.take(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.print("consume.."); - } - } -} -``` - -```java -public static void main(String[] args) { - for (int i = 0; i < 2; i++) { - Producer producer = new Producer(); - producer.start(); - } - for (int i = 0; i < 5; i++) { - Consumer consumer = new Consumer(); - consumer.start(); - } - for (int i = 0; i < 3; i++) { - Producer producer = new Producer(); - producer.start(); - } -} -``` - -```html -produce..produce..consume..consume..produce..consume..produce..consume..produce..consume.. -``` - -### ForkJoin - -主要用于并行计算中,和 MapReduce 原理类似,都是把大的计算任务拆分成多个小任务并行计算。 - -```java -public class ForkJoinExample extends RecursiveTask { - - private final int threshold = 5; - private int first; - private int last; - - public ForkJoinExample(int first, int last) { - this.first = first; - this.last = last; - } - - @Override - protected Integer compute() { - int result = 0; - if (last - first <= threshold) { - // 任务足够小则直接计算 - for (int i = first; i <= last; i++) { - result += i; - } - } else { - // 拆分成小任务 - int middle = first + (last - first) / 2; - ForkJoinExample leftTask = new ForkJoinExample(first, middle); - ForkJoinExample rightTask = new ForkJoinExample(middle + 1, last); - leftTask.fork(); - rightTask.fork(); - result = leftTask.join() + rightTask.join(); - } - return result; - } -} -``` - -```java -public static void main(String[] args) throws ExecutionException, InterruptedException { - ForkJoinExample example = new ForkJoinExample(1, 10000); - ForkJoinPool forkJoinPool = new ForkJoinPool(); - Future result = forkJoinPool.submit(example); - System.out.println(result.get()); -} -``` - -ForkJoin 使用 ForkJoinPool 来启动,它是一个特殊的线程池,线程数量取决于 CPU 核数。 - -```java -public class ForkJoinPool extends AbstractExecutorService -``` - -ForkJoinPool 实现了工作窃取算法来提高 CPU 的利用率。每个线程都维护了一个双端队列,用来存储需要执行的任务。工作窃取算法允许空闲的线程从其它线程的双端队列中窃取一个任务来执行。窃取的任务必须是最晚的任务,避免和队列所属线程发生竞争。例如下图中,Thread2 从 Thread1 的队列中拿出最晚的 Task1 任务,Thread1 会拿出 Task2 来执行,这样就避免发生竞争。但是如果队列中只有一个任务时还是会发生竞争。 - -

- -## 九、线程不安全示例 - -如果多个线程对同一个共享数据进行访问而不采取同步操作的话,那么操作的结果是不一致的。 - -以下代码演示了 1000 个线程同时对 cnt 执行自增操作,操作结束之后它的值有可能小于 1000。 - -```java -public class ThreadUnsafeExample { - - private int cnt = 0; - - public void add() { - cnt++; - } - - public int get() { - return cnt; - } -} -``` - -```java -public static void main(String[] args) throws InterruptedException { - final int threadSize = 1000; - ThreadUnsafeExample example = new ThreadUnsafeExample(); - final CountDownLatch countDownLatch = new CountDownLatch(threadSize); - ExecutorService executorService = Executors.newCachedThreadPool(); - for (int i = 0; i < threadSize; i++) { - executorService.execute(() -> { - example.add(); - countDownLatch.countDown(); - }); - } - countDownLatch.await(); - executorService.shutdown(); - System.out.println(example.get()); -} -``` - -```html -997 -``` - -## 十、Java 内存模型 - -Java 内存模型试图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。 - -### 主内存与工作内存 - -处理器上的寄存器的读写的速度比内存快几个数量级,为了解决这种速度矛盾,在它们之间加入了高速缓存。 - -加入高速缓存带来了一个新的问题:缓存一致性。如果多个缓存共享同一块主内存区域,那么多个缓存的数据可能会不一致,需要一些协议来解决这个问题。 - -

- -所有的变量都存储在主内存中,每个线程还有自己的工作内存,工作内存存储在高速缓存或者寄存器中,保存了该线程使用的变量的主内存副本拷贝。 - -线程只能直接操作工作内存中的变量,不同线程之间的变量值传递需要通过主内存来完成。 - -

- -### 内存间交互操作 - -Java 内存模型定义了 8 个操作来完成主内存和工作内存的交互操作。 - -

- -- read:把一个变量的值从主内存传输到工作内存中 -- load:在 read 之后执行,把 read 得到的值放入工作内存的变量副本中 -- use:把工作内存中一个变量的值传递给执行引擎 -- assign:把一个从执行引擎接收到的值赋给工作内存的变量 -- store:把工作内存的一个变量的值传送到主内存中 -- write:在 store 之后执行,把 store 得到的值放入主内存的变量中 -- lock:作用于主内存的变量 -- unlock - -### 内存模型三大特性 - -#### 1. 原子性 - -Java 内存模型保证了 read、load、use、assign、store、write、lock 和 unlock 操作具有原子性,例如对一个 int 类型的变量执行 assign 赋值操作,这个操作就是原子性的。但是 Java 内存模型允许虚拟机将没有被 volatile 修饰的 64 位数据(long,double)的读写操作划分为两次 32 位的操作来进行,即 load、store、read 和 write 操作可以不具备原子性。 - -有一个错误认识就是,int 等原子性的类型在多线程环境中不会出现线程安全问题。前面的线程不安全示例代码中,cnt 属于 int 类型变量,1000 个线程对它进行自增操作之后,得到的值为 997 而不是 1000。 - -为了方便讨论,将内存间的交互操作简化为 3 个:load、assign、store。 - -下图演示了两个线程同时对 cnt 进行操作,load、assign、store 这一系列操作整体上看不具备原子性,那么在 T1 修改 cnt 并且还没有将修改后的值写入主内存,T2 依然可以读入旧值。可以看出,这两个线程虽然执行了两次自增运算,但是主内存中 cnt 的值最后为 1 而不是 2。因此对 int 类型读写操作满足原子性只是说明 load、assign、store 这些单个操作具备原子性。 - -

- -AtomicInteger 能保证多个线程修改的原子性。 - -

- -使用 AtomicInteger 重写之前线程不安全的代码之后得到以下线程安全实现: - -```java -public class AtomicExample { - private AtomicInteger cnt = new AtomicInteger(); - - public void add() { - cnt.incrementAndGet(); - } - - public int get() { - return cnt.get(); - } -} -``` - -```java -public static void main(String[] args) throws InterruptedException { - final int threadSize = 1000; - AtomicExample example = new AtomicExample(); // 只修改这条语句 - final CountDownLatch countDownLatch = new CountDownLatch(threadSize); - ExecutorService executorService = Executors.newCachedThreadPool(); - for (int i = 0; i < threadSize; i++) { - executorService.execute(() -> { - example.add(); - countDownLatch.countDown(); - }); - } - countDownLatch.await(); - executorService.shutdown(); - System.out.println(example.get()); -} -``` - -```html -1000 -``` - -除了使用原子类之外,也可以使用 synchronized 互斥锁来保证操作的原子性。它对应的内存间交互操作为:lock 和 unlock,在虚拟机实现上对应的字节码指令为 monitorenter 和 monitorexit。 - -```java -public class AtomicSynchronizedExample { - private int cnt = 0; - - public synchronized void add() { - cnt++; - } - - public synchronized int get() { - return cnt; - } -} -``` - -```java -public static void main(String[] args) throws InterruptedException { - final int threadSize = 1000; - AtomicSynchronizedExample example = new AtomicSynchronizedExample(); - final CountDownLatch countDownLatch = new CountDownLatch(threadSize); - ExecutorService executorService = Executors.newCachedThreadPool(); - for (int i = 0; i < threadSize; i++) { - executorService.execute(() -> { - example.add(); - countDownLatch.countDown(); - }); - } - countDownLatch.await(); - executorService.shutdown(); - System.out.println(example.get()); -} -``` - -```html -1000 -``` - -#### 2. 可见性 - -可见性指当一个线程修改了共享变量的值,其它线程能够立即得知这个修改。Java 内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值来实现可见性的。 - -主要有三种实现可见性的方式: - -- volatile -- synchronized,对一个变量执行 unlock 操作之前,必须把变量值同步回主内存。 -- final,被 final 关键字修饰的字段在构造器中一旦初始化完成,并且没有发生 this 逃逸(其它线程通过 this 引用访问到初始化了一半的对象),那么其它线程就能看见 final 字段的值。 - -对前面的线程不安全示例中的 cnt 变量使用 volatile 修饰,不能解决线程不安全问题,因为 volatile 并不能保证操作的原子性。 - -#### 3. 有序性 - -有序性是指:在本线程内观察,所有操作都是有序的。在一个线程观察另一个线程,所有操作都是无序的,无序是因为发生了指令重排序。在 Java 内存模型中,允许编译器和处理器对指令进行重排序,重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。 - -volatile 关键字通过添加内存屏障的方式来禁止指令重排,即重排序时不能把后面的指令放到内存屏障之前。 - -也可以通过 synchronized 来保证有序性,它保证每个时刻只有一个线程执行同步代码,相当于是让线程顺序执行同步代码。 - -### 先行发生原则 - -上面提到了可以用 volatile 和 synchronized 来保证有序性。除此之外,JVM 还规定了先行发生原则,让一个操作无需控制就能先于另一个操作完成。 - -#### 1. 单一线程原则 - -> Single Thread rule - -在一个线程内,在程序前面的操作先行发生于后面的操作。 - -

- -#### 2. 管程锁定规则 - -> Monitor Lock Rule - -一个 unlock 操作先行发生于后面对同一个锁的 lock 操作。 - -

- -#### 3. volatile 变量规则 - -> Volatile Variable Rule - -对一个 volatile 变量的写操作先行发生于后面对这个变量的读操作。 - -

- -#### 4. 线程启动规则 - -> Thread Start Rule - -Thread 对象的 start() 方法调用先行发生于此线程的每一个动作。 - -

- -#### 5. 线程加入规则 - -> Thread Join Rule - -Thread 对象的结束先行发生于 join() 方法返回。 - -

- -#### 6. 线程中断规则 - -> Thread Interruption Rule - -对线程 interrupt() 方法的调用先行发生于被中断线程的代码检测到中断事件的发生,可以通过 interrupted() 方法检测到是否有中断发生。 - -#### 7. 对象终结规则 - -> Finalizer Rule - -一个对象的初始化完成(构造函数执行结束)先行发生于它的 finalize() 方法的开始。 - -#### 8. 传递性 - -> Transitivity - -如果操作 A 先行发生于操作 B,操作 B 先行发生于操作 C,那么操作 A 先行发生于操作 C。 - -## 十一、线程安全 - -多个线程不管以何种方式访问某个类,并且在主调代码中不需要进行同步,都能表现正确的行为。 - -线程安全有以下几种实现方式: - -### 不可变 - -不可变(Immutable)的对象一定是线程安全的,不需要再采取任何的线程安全保障措施。只要一个不可变的对象被正确地构建出来,永远也不会看到它在多个线程之中处于不一致的状态。多线程环境下,应当尽量使对象成为不可变,来满足线程安全。 - -不可变的类型: - -- final 关键字修饰的基本数据类型 -- String -- 枚举类型 -- Number 部分子类,如 Long 和 Double 等数值包装类型,BigInteger 和 BigDecimal 等大数据类型。但同为 Number 的原子类 AtomicInteger 和 AtomicLong 则是可变的。 - -对于集合类型,可以使用 Collections.unmodifiableXXX() 方法来获取一个不可变的集合。 - -```java -public class ImmutableExample { - public static void main(String[] args) { - Map map = new HashMap<>(); - Map unmodifiableMap = Collections.unmodifiableMap(map); - unmodifiableMap.put("a", 1); - } -} -``` - -```html -Exception in thread "main" java.lang.UnsupportedOperationException - at java.util.Collections$UnmodifiableMap.put(Collections.java:1457) - at ImmutableExample.main(ImmutableExample.java:9) -``` - -Collections.unmodifiableXXX() 先对原始的集合进行拷贝,需要对集合进行修改的方法都直接抛出异常。 - -```java -public V put(K key, V value) { - throw new UnsupportedOperationException(); -} -``` - -### 互斥同步 - -synchronized 和 ReentrantLock。 - -### 非阻塞同步 - -互斥同步最主要的问题就是线程阻塞和唤醒所带来的性能问题,因此这种同步也称为阻塞同步。 - -互斥同步属于一种悲观的并发策略,总是认为只要不去做正确的同步措施,那就肯定会出现问题。无论共享数据是否真的会出现竞争,它都要进行加锁(这里讨论的是概念模型,实际上虚拟机会优化掉很大一部分不必要的加锁)、用户态核心态转换、维护锁计数器和检查是否有被阻塞的线程需要唤醒等操作。 - -随着硬件指令集的发展,我们可以使用基于冲突检测的乐观并发策略:先进行操作,如果没有其它线程争用共享数据,那操作就成功了,否则采取补偿措施(不断地重试,直到成功为止)。这种乐观的并发策略的许多实现都不需要将线程阻塞,因此这种同步操作称为非阻塞同步。 - -#### 1. CAS - -乐观锁需要操作和冲突检测这两个步骤具备原子性,这里就不能再使用互斥同步来保证了,只能靠硬件来完成。硬件支持的原子性操作最典型的是:比较并交换(Compare-and-Swap,CAS)。CAS 指令需要有 3 个操作数,分别是内存地址 V、旧的预期值 A 和新值 B。当执行操作时,只有当 V 的值等于 A,才将 V 的值更新为 B。 - -#### 2. AtomicInteger - -J.U.C 包里面的整数原子类 AtomicInteger 的方法调用了 Unsafe 类的 CAS 操作。 - -以下代码使用了 AtomicInteger 执行了自增的操作。 - -```java -private AtomicInteger cnt = new AtomicInteger(); - -public void add() { - cnt.incrementAndGet(); -} -``` - -以下代码是 incrementAndGet() 的源码,它调用了 Unsafe 的 getAndAddInt() 。 - -```java -public final int incrementAndGet() { - return unsafe.getAndAddInt(this, valueOffset, 1) + 1; -} -``` - -以下代码是 getAndAddInt() 源码,var1 指示对象内存地址,var2 指示该字段相对对象内存地址的偏移,var4 指示操作需要加的数值,这里为 1。通过 getIntVolatile(var1, var2) 得到旧的预期值,通过调用 compareAndSwapInt() 来进行 CAS 比较,如果该字段内存地址中的值等于 var5,那么就更新内存地址为 var1+var2 的变量为 var5+var4。 - -可以看到 getAndAddInt() 在一个循环中进行,发生冲突的做法是不断的进行重试。 - -```java -public final int getAndAddInt(Object var1, long var2, int var4) { - int var5; - do { - var5 = this.getIntVolatile(var1, var2); - } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4)); - - return var5; -} -``` - -#### 3. ABA - -如果一个变量初次读取的时候是 A 值,它的值被改成了 B,后来又被改回为 A,那 CAS 操作就会误认为它从来没有被改变过。 - -J.U.C 包提供了一个带有标记的原子引用类 AtomicStampedReference 来解决这个问题,它可以通过控制变量值的版本来保证 CAS 的正确性。大部分情况下 ABA 问题不会影响程序并发的正确性,如果需要解决 ABA 问题,改用传统的互斥同步可能会比原子类更高效。 - -### 无同步方案 - -要保证线程安全,并不是一定就要进行同步。如果一个方法本来就不涉及共享数据,那它自然就无须任何同步措施去保证正确性。 - -#### 1. 栈封闭 - -多个线程访问同一个方法的局部变量时,不会出现线程安全问题,因为局部变量存储在虚拟机栈中,属于线程私有的。 - -```java -public class StackClosedExample { - public void add100() { - int cnt = 0; - for (int i = 0; i < 100; i++) { - cnt++; - } - System.out.println(cnt); - } -} -``` - -```java -public static void main(String[] args) { - StackClosedExample example = new StackClosedExample(); - ExecutorService executorService = Executors.newCachedThreadPool(); - executorService.execute(() -> example.add100()); - executorService.execute(() -> example.add100()); - executorService.shutdown(); -} -``` - -```html -100 -100 -``` - -#### 2. 线程本地存储(Thread Local Storage) - -如果一段代码中所需要的数据必须与其他代码共享,那就看看这些共享数据的代码是否能保证在同一个线程中执行。如果能保证,我们就可以把共享数据的可见范围限制在同一个线程之内,这样,无须同步也能保证线程之间不出现数据争用的问题。 - -符合这种特点的应用并不少见,大部分使用消费队列的架构模式(如“生产者-消费者”模式)都会将产品的消费过程尽量在一个线程中消费完。其中最重要的一个应用实例就是经典 Web 交互模型中的“一个请求对应一个服务器线程”(Thread-per-Request)的处理方式,这种处理方式的广泛应用使得很多 Web 服务端应用都可以使用线程本地存储来解决线程安全问题。 - -可以使用 java.lang.ThreadLocal 类来实现线程本地存储功能。 - -对于以下代码,thread1 中设置 threadLocal 为 1,而 thread2 设置 threadLocal 为 2。过了一段时间之后,thread1 读取 threadLocal 依然是 1,不受 thread2 的影响。 - -```java -public class ThreadLocalExample { - public static void main(String[] args) { - ThreadLocal threadLocal = new ThreadLocal(); - Thread thread1 = new Thread(() -> { - threadLocal.set(1); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println(threadLocal.get()); - threadLocal.remove(); - }); - Thread thread2 = new Thread(() -> { - threadLocal.set(2); - threadLocal.remove(); - }); - thread1.start(); - thread2.start(); - } -} -``` - -```html -1 -``` - -为了理解 ThreadLocal,先看以下代码: - -```java -public class ThreadLocalExample1 { - public static void main(String[] args) { - ThreadLocal threadLocal1 = new ThreadLocal(); - ThreadLocal threadLocal2 = new ThreadLocal(); - Thread thread1 = new Thread(() -> { - threadLocal1.set(1); - threadLocal2.set(1); - }); - Thread thread2 = new Thread(() -> { - threadLocal1.set(2); - threadLocal2.set(2); - }); - thread1.start(); - thread2.start(); - } -} -``` - -它所对应的底层结构图为: - -

- -每个 Thread 都有一个 ThreadLocal.ThreadLocalMap 对象。 - -```java -/* ThreadLocal values pertaining to this thread. This map is maintained - * by the ThreadLocal class. */ -ThreadLocal.ThreadLocalMap threadLocals = null; -``` - -当调用一个 ThreadLocal 的 set(T value) 方法时,先得到当前线程的 ThreadLocalMap 对象,然后将 ThreadLocal-\>value 键值对插入到该 Map 中。 - -```java -public void set(T value) { - Thread t = Thread.currentThread(); - ThreadLocalMap map = getMap(t); - if (map != null) - map.set(this, value); - else - createMap(t, value); -} -``` - -get() 方法类似。 - -```java -public T get() { - Thread t = Thread.currentThread(); - ThreadLocalMap map = getMap(t); - if (map != null) { - ThreadLocalMap.Entry e = map.getEntry(this); - if (e != null) { - @SuppressWarnings("unchecked") - T result = (T)e.value; - return result; - } - } - return setInitialValue(); -} -``` - -ThreadLocal 从理论上讲并不是用来解决多线程并发问题的,因为根本不存在多线程竞争。 - -在一些场景 (尤其是使用线程池) 下,由于 ThreadLocal.ThreadLocalMap 的底层数据结构导致 ThreadLocal 有内存泄漏的情况,应该尽可能在每次使用 ThreadLocal 后手动调用 remove(),以避免出现 ThreadLocal 经典的内存泄漏甚至是造成自身业务混乱的风险。 - -#### 3. 可重入代码(Reentrant Code) - -这种代码也叫做纯代码(Pure Code),可以在代码执行的任何时刻中断它,转而去执行另外一段代码(包括递归调用它本身),而在控制权返回后,原来的程序不会出现任何错误。 - -可重入代码有一些共同的特征,例如不依赖存储在堆上的数据和公用的系统资源、用到的状态量都由参数中传入、不调用非可重入的方法等。 - -## 十二、锁优化 - -这里的锁优化主要是指 JVM 对 synchronized 的优化。 - -### 自旋锁 - -互斥同步进入阻塞状态的开销都很大,应该尽量避免。在许多应用中,共享数据的锁定状态只会持续很短的一段时间。自旋锁的思想是让一个线程在请求一个共享数据的锁时执行忙循环(自旋)一段时间,如果在这段时间内能获得锁,就可以避免进入阻塞状态。 - -自旋锁虽然能避免进入阻塞状态从而减少开销,但是它需要进行忙循环操作占用 CPU 时间,它只适用于共享数据的锁定状态很短的场景。 - -在 JDK 1.6 中引入了自适应的自旋锁。自适应意味着自旋的次数不再固定了,而是由前一次在同一个锁上的自旋次数及锁的拥有者的状态来决定。 - -### 锁消除 - -锁消除是指对于被检测出不可能存在竞争的共享数据的锁进行消除。 - -锁消除主要是通过逃逸分析来支持,如果堆上的共享数据不可能逃逸出去被其它线程访问到,那么就可以把它们当成私有数据对待,也就可以将它们的锁进行消除。 - -对于一些看起来没有加锁的代码,其实隐式的加了很多锁。例如下面的字符串拼接代码就隐式加了锁: - -```java -public static String concatString(String s1, String s2, String s3) { - return s1 + s2 + s3; -} -``` - -String 是一个不可变的类,编译器会对 String 的拼接自动优化。在 JDK 1.5 之前,会转化为 StringBuffer 对象的连续 append() 操作: - -```java -public static String concatString(String s1, String s2, String s3) { - StringBuffer sb = new StringBuffer(); - sb.append(s1); - sb.append(s2); - sb.append(s3); - return sb.toString(); -} -``` - -每个 append() 方法中都有一个同步块。虚拟机观察变量 sb,很快就会发现它的动态作用域被限制在 concatString() 方法内部。也就是说,sb 的所有引用永远不会逃逸到 concatString() 方法之外,其他线程无法访问到它,因此可以进行消除。 - -### 锁粗化 - -如果一系列的连续操作都对同一个对象反复加锁和解锁,频繁的加锁操作就会导致性能损耗。 - -上一节的示例代码中连续的 append() 方法就属于这类情况。如果虚拟机探测到由这样的一串零碎的操作都对同一个对象加锁,将会把加锁的范围扩展(粗化)到整个操作序列的外部。对于上一节的示例代码就是扩展到第一个 append() 操作之前直至最后一个 append() 操作之后,这样只需要加锁一次就可以了。 - -### 轻量级锁 - -JDK 1.6 引入了偏向锁和轻量级锁,从而让锁拥有了四个状态:无锁状态(unlocked)、偏向锁状态(biasble)、轻量级锁状态(lightweight locked)和重量级锁状态(inflated)。 - -以下是 HotSpot 虚拟机对象头的内存布局,这些数据被称为 Mark Word。其中 tag bits 对应了五个状态,这些状态在右侧的 state 表格中给出。除了 marked for gc 状态,其它四个状态已经在前面介绍过了。 - -

- -下图左侧是一个线程的虚拟机栈,其中有一部分称为 Lock Record 的区域,这是在轻量级锁运行过程创建的,用于存放锁对象的 Mark Word。而右侧就是一个锁对象,包含了 Mark Word 和其它信息。 - -

- -轻量级锁是相对于传统的重量级锁而言,它使用 CAS 操作来避免重量级锁使用互斥量的开销。对于绝大部分的锁,在整个同步周期内都是不存在竞争的,因此也就不需要都使用互斥量进行同步,可以先采用 CAS 操作进行同步,如果 CAS 失败了再改用互斥量进行同步。 - -当尝试获取一个锁对象时,如果锁对象标记为 0 01,说明锁对象的锁未锁定(unlocked)状态。此时虚拟机在当前线程的虚拟机栈中创建 Lock Record,然后使用 CAS 操作将对象的 Mark Word 更新为 Lock Record 指针。如果 CAS 操作成功了,那么线程就获取了该对象上的锁,并且对象的 Mark Word 的锁标记变为 00,表示该对象处于轻量级锁状态。 - -

- -如果 CAS 操作失败了,虚拟机首先会检查对象的 Mark Word 是否指向当前线程的虚拟机栈,如果是的话说明当前线程已经拥有了这个锁对象,那就可以直接进入同步块继续执行,否则说明这个锁对象已经被其他线程线程抢占了。如果有两条以上的线程争用同一个锁,那轻量级锁就不再有效,要膨胀为重量级锁。 - -### 偏向锁 - -偏向锁的思想是偏向于让第一个获取锁对象的线程,这个线程在之后获取该锁就不再需要进行同步操作,甚至连 CAS 操作也不再需要。 - -当锁对象第一次被线程获得的时候,进入偏向状态,标记为 1 01。同时使用 CAS 操作将线程 ID 记录到 Mark Word 中,如果 CAS 操作成功,这个线程以后每次进入这个锁相关的同步块就不需要再进行任何同步操作。 - -当有另外一个线程去尝试获取这个锁对象时,偏向状态就宣告结束,此时撤销偏向(Revoke Bias)后恢复到未锁定状态或者轻量级锁状态。 - -

- -## 十三、多线程开发良好的实践 - -- 给线程起个有意义的名字,这样可以方便找 Bug。 - -- 缩小同步范围,从而减少锁争用。例如对于 synchronized,应该尽量使用同步块而不是同步方法。 - -- 多用同步工具少用 wait() 和 notify()。首先,CountDownLatch, CyclicBarrier, Semaphore 和 Exchanger 这些同步类简化了编码操作,而用 wait() 和 notify() 很难实现复杂控制流;其次,这些同步类是由最好的企业编写和维护,在后续的 JDK 中还会不断优化和完善。 - -- 使用 BlockingQueue 实现生产者消费者问题。 - -- 多用并发集合少用同步集合,例如应该使用 ConcurrentHashMap 而不是 Hashtable。 - -- 使用本地变量和不可变类来保证线程安全。 - -- 使用线程池而不是直接创建线程,这是因为创建线程代价很高,线程池可以有效地利用有限的线程来启动任务。 - -## 参考资料 - -- BruceEckel. Java 编程思想: 第 4 版 [M]. 机械工业出版社, 2007. -- 周志明. 深入理解 Java 虚拟机 [M]. 机械工业出版社, 2011. -- [Threads and Locks](https://docs.oracle.com/javase/specs/jvms/se6/html/Threads.doc.html) -- [线程通信](http://ifeve.com/thread-signaling/#missed_signal) -- [Java 线程面试题 Top 50](http://www.importnew.com/12773.html) -- [BlockingQueue](http://tutorials.jenkov.com/java-util-concurrent/blockingqueue.html) -- [thread state java](https://stackoverflow.com/questions/11265289/thread-state-java) -- [CSC 456 Spring 2012/ch7 MN](http://wiki.expertiza.ncsu.edu/index.php/CSC_456_Spring_2012/ch7_MN) -- [Java - Understanding Happens-before relationship](https://www.logicbig.com/tutorials/core-java-tutorial/java-multi-threading/happens-before.html) -- [6장 Thread Synchronization](https://www.slideshare.net/novathinker/6-thread-synchronization) -- [How is Java's ThreadLocal implemented under the hood?](https://stackoverflow.com/questions/1202444/how-is-javas-threadlocal-implemented-under-the-hood/15653015) -- [Concurrent](https://sites.google.com/site/webdevelopart/21-compile/06-java/javase/concurrent?tmpl=%2Fsystem%2Fapp%2Ftemplates%2Fprint%2F&showPrintDialog=1) -- [JAVA FORK JOIN EXAMPLE](http://www.javacreed.com/java-fork-join-example/ "Java Fork Join Example") -- [聊聊并发(八)——Fork/Join 框架介绍](http://ifeve.com/talk-concurrency-forkjoin/) -- [Eliminating SynchronizationRelated Atomic Operations with Biased Locking and Bulk Rebiasing](http://www.oracle.com/technetwork/java/javase/tech/biasedlocking-oopsla2006-preso-150106.pdf) diff --git a/Java基础教程/Java并发编程/image/2022-12-16-16-18-55.png b/Java基础教程/Java并发编程/image/2022-12-16-16-18-55.png new file mode 100644 index 0000000000000000000000000000000000000000..1aff60eda4db6ae1ffc6e8c52eee65fce1ab0341 GIT binary patch literal 41575 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π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 literal 0 HcmV?d00001 diff --git a/Java基础教程/Java并发编程/image/2022-12-16-18-02-06.png b/Java基础教程/Java并发编程/image/2022-12-16-18-02-06.png new file mode 100644 index 0000000000000000000000000000000000000000..9181c16c33f0f23eaa881c7bceabe5b42cf69d3b GIT binary patch literal 40446 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�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 literal 0 HcmV?d00001 diff --git a/Java基础教程/Java并发编程/image/2022-12-16-20-02-23.png b/Java基础教程/Java并发编程/image/2022-12-16-20-02-23.png new file mode 100644 index 0000000000000000000000000000000000000000..74615a451e3b50bc8686cbce186bdc7c76dc5ded GIT binary patch literal 31028 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%0DC4W0KmPxXSm`WC&dVz5KsNc=2ih7L~D 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 hDG2kRy+K+~T{|hB%liUCR literal 0 HcmV?d00001 diff --git a/Java基础教程/Java并发编程/image/2022-12-16-20-24-02.png b/Java基础教程/Java并发编程/image/2022-12-16-20-24-02.png new file mode 100644 index 0000000000000000000000000000000000000000..679c8f8b21007ee489db2e5759472cbd93fa7015 GIT binary patch literal 39445 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

+o{moT_PIP|br1?wfj>%RhNdcM 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

+o{moT_PIP|br1?wfj>%RhNdcM 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

+o{moT_PIP|br1?wfj>%RhNdcM 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

+o{moT_PIP|br1?wfj>%RhNdcM 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 literal 0 HcmV?d00001 diff --git a/Java基础教程/Java并发编程/image/2022-12-19-14-45-38.png b/Java基础教程/Java并发编程/image/2022-12-19-14-45-38.png new file mode 100644 index 0000000000000000000000000000000000000000..e1e6b2befb5409dc8f5879fabaae0e7c9e4fa62f GIT binary patch literal 36768 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 Eg8iwOwg3PC literal 0 HcmV?d00001 diff --git a/Java基础教程/Java并发编程/image/2022-12-19-14-45-52.png b/Java基础教程/Java并发编程/image/2022-12-19-14-45-52.png new file mode 100644 index 0000000000000000000000000000000000000000..8bdd2cc2ed682a058f4487f63ebed0ede4d890e2 GIT binary patch literal 29916 zcmd42b8ux(_wajS+s?!jV`5`sdy-6S+qOBeZQHhOO*FARN#2w1^ZZ!v{qI)Yd#X;I z-o4lA-mP`IKWptUd08<8SX@{D0DvGNE}{qkfV2X?%Fv*|9JaGXQUCzn(o9%bUP4%y zSl-^o*v!%h01yvLRD)7i8pX`gjE{|-0Y!;Lbw?9%k3$uTP%ib4iUmiNjD!&!)W*cn zY7g~A_z9ulNassSt0qorvqN-Y2l68Ouylt<);sF%y)Ce%NKJY)P zWkMKYuK@xS0vS`u*Y;nmApzAp5(RDmWDNHRGdEO-EU4NlbV%rH4Tve_-_#JYYQKv> z(gQiz29iPK^X*&bqygV91bJDqlVRMx@d=;N9!3lROrw2QvMKj(zNilHk+8djgC+}E z!kv>N_q+P4y|`qg`s~RO{XVj138`VO_AA1qjhC=*VR@gP`+J#`PD*sAhY&>lD|q

;0pJ(OuMkS=a|P0@NQ6@;Y-H}+)?O53JVAWw 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Öh{5nokGGIfQ1#%z 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 literal 0 HcmV?d00001 diff --git a/Java基础教程/Java并发编程/java.thread.md b/Java基础教程/Java并发编程/java.thread.md deleted file mode 100644 index 0a3c119a..00000000 --- a/Java基础教程/Java并发编程/java.thread.md +++ /dev/null @@ -1,370 +0,0 @@ -**引** - -如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。 - -用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。 - -很多人都对其中的一些概念不够明确,如同步、并发等等,让我们先建立一个数据字典,以免产生误会。 - -- 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程 - -- 并行与并发: - - - 并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。 - - - 并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。并发往往在场景中有公用的资源,那么针对这个公用的资源往往产生瓶颈,我们会用TPS或者QPS来反应这个系统的处理能力。 - -![a468b2694253.png](media/7932f8d9c5acc2d3a1896b4c3233612e.png) - -并发与并行 - -- 线程安全:经常用来描绘一段代码。指在并发的情况之下,该代码经过多线程使用,线程的调度顺序不影响任何结果。这个时候使用多线程,我们只需要关注系统的内存,cpu是不是够用即可。反过来,线程不安全就意味着线程的调度顺序会影响最终结果,如不加事务的转账代码: - -void transferMoney(User from, User to, float amount){ -to.setMoney(to.getBalance() + amount); from.setMoney(from.getBalance() - -amount); } - -- 同步:Java中的同步指的是通过人为的控制和调度,保证共享资源的多线程访问成为线程安全,来保证结果的准确。如上面的代码简单加入@synchronized关键字。在保证结果准确的同时,提高性能,才是优秀的程序。线程安全的优先级高于性能。 - -好了,让我们开始吧。我准备分成几部分来总结涉及到多线程的内容: - -1. 扎好马步:线程的状态 - -2. 内功心法:每个对象都有的方法(机制) - -3. 太祖长拳:基本线程类 - -4. 九阴真经:高级多线程控制类 - -**扎好马步:线程的状态** - -先来两张图: - -![5b75b44e972c.png](media/c5008c69466298cf4ed608e4f6b569f0.png) - -线程状态 - -![7101e6588094.png](media/995e20b243fa0e000d51589ebb780e75.png) - -线程状态转换 - -各种状态一目了然,值得一提的是"blocked"这个状态: - -线程在Running的过程中可能会遇到阻塞(Blocked)情况 - -1. 调用join()和sleep()方法,sleep()时间结束或被打断,join()中断,IO完成都会回到Runnable状态,等待JVM的调度。 - -2. 调用wait(),使该线程处于等待池(wait blocked - pool),直到notify()/notifyAll(),线程被唤醒被放到锁定池(lock blocked pool - ),释放同步锁使线程回到可运行状态(Runnable) - -3. 对Running状态的线程加同步锁(Synchronized)使其进入(lock blocked pool - ),同步锁被释放进入可运行状态(Runnable)。 - -此外,在runnable状态的线程是处于被调度的线程,此时的调度顺序是不一定的。Thread类中的yield方法可以让一个running状态的线程转入runnable。 - -**内功心法:每个对象都有的方法(机制)** - -synchronized, wait, notify 是任何对象都具有的同步工具。让我们先来了解他们 - -![0771d68cb2ba.png](media/51d56de3dfb3391d64c34cc5121e3bd0.png) - -monitor - -他们是应用于同步问题的人工线程调度工具。讲其本质,首先就要明确monitor的概念,Java中的每个对象都有一个监视器,来监测并发代码的重入。在非多线程编码时该监视器不发挥作用,反之如果在synchronized -范围内,监视器发挥作用。 - -wait/notify必须存在于synchronized块中。并且,这三个关键字针对的是同一个监视器(某对象的监视器)。这意味着wait之后,其他线程可以进入同步块执行。 - -当某代码并不持有监视器的使用权时(如图中5的状态,即脱离同步块)去wait或notify,会抛出java.lang.IllegalMonitorStateException。也包括在synchronized块中去调用另一个对象的wait/notify,因为不同对象的监视器不同,同样会抛出此异常。 - -再讲用法: - -- synchronized单独使用: - - - 代码块:如下,在多线程环境下,synchronized块中的方法获取了lock实例的monitor,如果实例相同,那么只有一个线程能执行该块内容 - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -public class Thread1 implements Runnable { Object lock; public void run() { -synchronized(lock){ ..do something } } } - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -- 直接用于方法: - 相当于上面代码中用lock来锁定的效果,实际获取的是Thread1类的monitor。更进一步,如果修饰的是static方法,则锁定该类所有实例。 - -public class Thread1 implements Runnable { public synchronized void run() { ..do -something } } - -- synchronized, wait, notify结合:典型场景生产者消费者问题 - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -/\*\* \* 生产者生产出来的产品交给店员 \*/ public synchronized void produce() { -if(this.product \>= MAX_PRODUCT) { try { wait(); -System.out.println("产品已满,请稍候再生产"); } catch(InterruptedException e) { -e.printStackTrace(); } return; } this.product++; -System.out.println("生产者生产第" + this.product + "个产品."); notifyAll(); -//通知等待区的消费者可以取出产品了 } /\*\* \* 消费者从店员取产品 \*/ public -synchronized void consume() { if(this.product \<= MIN_PRODUCT) { try { wait(); -System.out.println("缺货,稍候再取"); } catch (InterruptedException e) { -e.printStackTrace(); } return; } System.out.println("消费者取走了第" + -this.product + "个产品."); this.product--; notifyAll(); -//通知等待去的生产者可以生产产品了} - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -**volatile** - -多线程的内存模型:main memory(主存)、working -memory(线程栈),在处理数据时,线程会把值从主存load到本地栈,完成操作后再save回去(volatile关键词的作用:每次针对该变量的操作都激发一次load -and save)。 - -![6cfda7042c67.png](media/54db549dedb71c1ac0e24d21fa81faf4.png) - -volatile - -针对多线程使用的变量如果不是volatile或者final修饰的,很有可能产生不可预知的结果(另一个线程修改了这个值,但是之后在某线程看到的是修改之前的值)。其实道理上讲同一实例的同一属性本身只有一个副本。但是多线程是会缓存值的,本质上,volatile就是不去缓存,直接取值。在线程安全的情况下加volatile会牺牲性能。 - -**太祖长拳:基本线程类** - -基本线程类指的是Thread类,Runnable接口,Callable接口 - -Thread 类实现了Runnable接口,启动一个线程的方法: - -MyThread my = new MyThread(); my.start(); - -**Thread类相关方法:** - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -//当前线程可转让cpu控制权,让别的就绪状态线程运行(切换)public static -Thread.yield() //暂停一段时间public static Thread.sleep() -//在一个线程中调用other.join(),将等待other执行完后才继续本线程。 public join() -//后两个函数皆可以被打断public interrupte() - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -**关于中断**:它并不像stop方法那样会中断一个正在运行的线程。线程会不时地检测中断标识位,以判断线程是否应该被中断(中断标识值是否为true)。终端只会影响到wait状态、sleep状态和join状态。被打断的线程会抛出InterruptedException。 - -Thread.interrupted()检查当前线程是否发生中断,返回boolean - -synchronized在获锁的过程中是不能被中断的。 - -中断是一个状态!interrupt()方法只是将这个状态置为true而已。所以说正常运行的程序不去检测状态,就不会终止,而wait等阻塞方法会去检查并抛出异常。如果在正常运行的程序中添加while(!Thread.interrupted()) -,则同样可以在中断后离开代码体 - -**Thread类最佳实践**: - -写的时候最好要设置线程名称 Thread.name,并设置线程组 -ThreadGroup,目的是方便管理。在出现问题的时候,打印线程栈 (jstack -pid) -一眼就可以看出是哪个线程出的问题,这个线程是干什么的。 - -**如何获取线程中的异常** - -![5b7f8df6e8d3.png](media/429f749d3870e8c9a198746da0d0ca6e.png) - -不能用try,catch来获取线程中的异常 - -**Runnable** - -与Thread类似 - -**Callable** - -future模式:并发模式的一种,可以有两种形式,即无阻塞和阻塞,分别是isDone和get。其中Future对象用来存放该线程的返回值以及状态 - -ExecutorService e = Executors.newFixedThreadPool(3); -//submit方法有多重参数版本,及支持callable也能够支持runnable接口类型.Future -future = e.submit(new myCallable()); future.isDone() //return true,false 无阻塞 -future.get() // return 返回值,阻塞直到该线程运行结束 - -**九阴真经:高级多线程控制类** - -以上都属于内功心法,接下来是实际项目中常用到的工具了,Java1.5提供了一个非常高效实用的多线程包:*java.util.concurrent*, -提供了大量高级工具,可以帮助开发者编写高效、易维护、结构清晰的Java多线程程序。 - -**1.ThreadLocal类** - -用处:保存线程的独立变量。对一个线程类(继承自Thread) - -当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。常用于用户登录控制,如记录session信息。 - -实现:每个Thread都持有一个TreadLocalMap类型的变量(该类是一个轻量级的Map,功能与map一样,区别是桶里放的是entry而不是entry的链表。功能还是一个map。)以本身为key,以目标为value。 - -主要方法是get()和set(T a),set之后在map里维护一个threadLocal -\> -a,get时将a返回。ThreadLocal是一个特殊的容器。 - -**2.原子类(AtomicInteger、AtomicBoolean……)** - -如果使用atomic wrapper -class如atomicInteger,或者使用自己保证原子的操作,则等同于synchronized - -//返回值为booleanAtomicInteger.compareAndSet(int expect,int update) - -该方法可用于实现乐观锁,考虑文中最初提到的如下场景:a给b付款10元,a扣了10元,b要加10元。此时c给b2元,但是b的加十元代码约为: - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -if(b.value.compareAndSet(old, value)){ return ; }else{ //try again // if that -fails, rollback and log} - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -**AtomicReference** - -对于AtomicReference 来讲,也许对象会出现,属性丢失的情况,即oldObject == -current,但是oldObject.getPropertyA != current.getPropertyA。 - -这时候,AtomicStampedReference就派上用场了。这也是一个很常用的思路,即加上版本号 - -**3.Lock类** - -lock: 在java.util.concurrent包内。共有三个实现: - -ReentrantLock ReentrantReadWriteLock.ReadLock ReentrantReadWriteLock.WriteLock - -主要目的是和synchronized一样, -两者都是为了解决同步问题,处理资源争端而产生的技术。功能类似但有一些区别。 - -区别如下: - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -lock更灵活,可以自由定义多把锁的枷锁解锁顺序(synchronized要按照先加的后解顺序) -提供多种加锁方案,lock 阻塞式, trylock 无阻塞式, lockInterruptily 可打断式, -还有trylock的带超时时间版本。 本质上和监视器锁(即synchronized是一样的) -能力越大,责任越大,必须控制好加锁和解锁,否则会导致灾难。 和Condition类的结合。 -性能更高,对比如下图: - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -![93b31bfed934.png](media/4c9b2a5287c91f386c9db0ba1920904b.png) - -synchronized和Lock性能对比 - -**ReentrantLock** - -可重入的意义在于持有锁的线程可以继续持有,并且要释放对等的次数后才真正释放该锁。 - -使用方法是: - -1.先new一个实例 - -static ReentrantLock r=new ReentrantLock(); - -2.加锁 - -r.lock()或r.lockInterruptibly(); - -此处也是个不同,后者可被打断。当a线程lock后,b线程阻塞,此时如果是lockInterruptibly,那么在调用b.interrupt()之后,b线程退出阻塞,并放弃对资源的争抢,进入catch块。(如果使用后者,必须throw -interruptable exception 或catch) - -3.释放锁 - -r.unlock() - -必须做!何为必须做呢,要放在finally里面。以防止异常跳出了正常流程,导致灾难。这里补充一个小知识点,finally是可以信任的:经过测试,哪怕是发生了OutofMemoryError,finally块中的语句执行也能够得到保证。 - -**ReentrantReadWriteLock** - -可重入读写锁(读写锁的一个实现) - -ReentrantReadWriteLock lock = new ReentrantReadWriteLock() ReadLock r = -lock.readLock(); WriteLock w = lock.writeLock(); - -两者都有lock,unlock方法。写写,写读互斥;读读不互斥。可以实现并发读的高效线程安全代码 - -**4.容器类** - -这里就讨论比较常用的两个: - -BlockingQueue ConcurrentHashMap - -**BlockingQueue** - -阻塞队列。该类是java.util.concurrent包下的重要类,通过对Queue的学习可以得知,这个queue是单向队列,可以在队列头添加元素和在队尾删除或取出元素。类似于一个管 -道,特别适用于先进先出策略的一些应用场景。普通的queue接口主要实现有PriorityQueue(优先队列),有兴趣可以研究 - -BlockingQueue在队列的基础上添加了多线程协作的功能: - -![7b06b8d86db8.png](media/6cb91c2845273c5693a564bab023d4e3.png) - -BlockingQueue - -除了传统的queue功能(表格左边的两列)之外,还提供了阻塞接口put和take,带超时功能的阻塞接口offer和poll。put会在队列满的时候阻塞,直到有空间时被唤醒;take在队 -列空的时候阻塞,直到有东西拿的时候才被唤醒。用于生产者-消费者模型尤其好用,堪称神器。 - -常见的阻塞队列有: - -ArrayListBlockingQueue LinkedListBlockingQueue DelayQueue SynchronousQueue - -**ConcurrentHashMap** - -高效的线程安全哈希map。请对比hashTable , concurrentHashMap, HashMap - -**5.管理类** - -管理类的概念比较泛,用于管理线程,本身不是多线程的,但提供了一些机制来利用上述的工具做一些封装。 - -了解到的值得一提的管理类:ThreadPoolExecutor和 JMX框架下的系统级管理类 -ThreadMXBean - -**ThreadPoolExecutor** - -如果不了解这个类,应该了解前面提到的ExecutorService,开一个自己的线程池非常方便: - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -ExecutorService e = Executors.newCachedThreadPool(); ExecutorService e = -Executors.newSingleThreadExecutor(); ExecutorService e = -Executors.newFixedThreadPool(3); // -第一种是可变大小线程池,按照任务数来分配线程, // -第二种是单线程池,相当于FixedThreadPool(1) // 第三种是固定大小线程池。 // -然后运行e.execute(new MyRunnableImpl()); - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -该类内部是通过ThreadPoolExecutor实现的,掌握该类有助于理解线程池的管理,本质上,他们都是ThreadPoolExecutor类的各种实现版本。请参见javadoc: - -![8a70ba646843.png](media/ec7fd9666c2bd70bfc26c6c2a1f7538a.png) - -ThreadPoolExecutor参数解释 - -翻译一下: - -![copycode.gif](media/51e409b11aa51c150090697429a953ed.gif) - -复制代码 - -corePoolSize:池内线程初始值与最小值,就算是空闲状态,也会保持该数量线程。 -maximumPoolSize:线程最大值,线程的增长始终不会超过该值。 -keepAliveTime:当池内线程数高于corePoolSize时,经过多少时间多余的空闲线程才会被回收。回收前处于wait状态 -unit: 时间单位,可以使用TimeUnit的实例,如TimeUnit.MILLISECONDS -workQueue:待入任务(Runnable)的等待场所,该参数主要影响调度策略,如公平与否,是否产生饿死(starving) -threadFactory:线程工厂类,有默认实现,如果有自定义的需要则需要自己实现ThreadFactory接口并作为参数传入。 diff --git a/Java基础教程/Java并发编程/事件处理.md b/Java基础教程/Java并发编程/事件处理.md deleted file mode 100644 index 3422200c..00000000 --- a/Java基础教程/Java并发编程/事件处理.md +++ /dev/null @@ -1,5 +0,0 @@ -# 底层事件处理 - ------ - -* 在java.awt学习的时候,将监听器绑定到事件源上,当指定事件发生时监听器会自动匹配到相应的动作,执行相应的处理方式。但在底层事件处理过程中,不许要监听器,能够直接获取当前发生的底层事件,然后进行匹配处理。 \ No newline at end of file diff --git a/Java基础教程/Java并发编程/事件监听机制.md b/Java基础教程/Java并发编程/事件监听机制.md deleted file mode 100644 index d75ab3c9..00000000 --- a/Java基础教程/Java并发编程/事件监听机制.md +++ /dev/null @@ -1,117 +0,0 @@ -## 新的事件监听机制 - ------ - -* 之前是定义一个组件对象(事件源),队组建对象绑定一个监听器对象,在监听器对象中有监听同一事件不同动作的函数,函数内部对事件进行处理。从监听器的角度对事件和动作进行处理。 -* 现在是直接将静态事件绑定到事件源上,通过process函数运行运行事件发生时的处理方式。而且这些静态事件是已经存在于awtEvent类中的。 - -``` - - package EventHandle; - - import java.awt.*; - import java.awt.event.ComponentEvent; - import java.awt.event.MouseEvent; - import java.awt.event.WindowEvent; - - /** - * @author 宙斯 - * 准确的说这并不是先前的事件监听机制吧。它不存在指明的监听器。 - * 应该更像一种组件自带的事件匹配功能。 - * 具体步骤: - * 打开某一类型的事件匹配功能。 - * 使用process函数运行某个事件 - * 当事件发生时通过事件的ID匹配具体的动作。 - * 匹配后设置相应的处理方式。 - */ - - public class baseEvent extends Frame{ - private int x = 0,y = 0,flag = 0; - private Image img; - private int dx = 0,dy = 0; - - public static void main(String[] args) { - baseEvent bE = new baseEvent(); - } - public baseEvent(){ - super(); - setSize(500,500); - this.setVisible(true); - - Toolkit tk = Toolkit.getDefaultToolkit(); - img = tk.getImage("first.png"); - - //相当于添加了对Component事件的监听器,似乎监听器类在底层已经直接绑定。 - enableEvents(AWTEvent.COMPONENT_EVENT_MASK); - enableEvents(AWTEvent.WINDOW_EVENT_MASK); - enableEvents(AWTEvent.MOUSE_EVENT_MASK); - - repaint(); - - } - - //直接调用底层的事件处理函数 - public void processComponentEvent(ComponentEvent e){ - if(e.getID() == ComponentEvent.COMPONENT_MOVED){ - System.out.println(e.getSource()); - System.out.println(e.getID()); - - } - } - - public void processWindowEvent(WindowEvent e){ - if(e.getID() == WindowEvent.WINDOW_CLOSING){ - System.exit(0); - } - } - /* - public void processMouseEvent(MouseEvent e){ - if(e.getID() == MouseEvent.MOUSE_PRESSED){ - System.out.println("pressed"); - if((e.getX()>= x)&&(e.getX()<=x+100)&&(e.getY()>=y)&&(e.getY()<=y+100)){ - flag = 1; - System.out.println(e.getX()+"..."+e.getY()); - - } - } - if((e.getID()==MouseEvent.MOUSE_RELEASED)&&(flag == 1)){ - x = e.getX(); - y = e.getY(); - repaint(); - flag = 0; - } - } - */ - public void processMouseEvent(MouseEvent e){ - if(e.getID() == MouseEvent.MOUSE_PRESSED){ - System.out.println("pressed"); - if((e.getX()>= x)&&(e.getX()<=x+100)&&(e.getY()>=y)&&(e.getY()<=y+100)){ - dx = e.getX()-x; - dy = e.getY()-y; - flag = 1; - System.out.println(e.getX()+"..."+e.getY()); - - } - } - if(e.getID()== MouseEvent.MOUSE_MOVED&&flag ==1){ - x = e.getX()-dx; - y = e.getY()-dy; - System.out.println(e.getX()+"..."+e.getY()); - - repaint(); - - } - if((e.getID()==MouseEvent.MOUSE_RELEASED)&&(flag == 1)){ - flag = 0; - } - - } - public void paint(Graphics g){ - g.drawImage(img, x, y,100,100, this); - } - - -} - - -``` \ No newline at end of file diff --git a/Java基础教程/Java并发编程/多线程共享受限资源.md b/Java基础教程/Java并发编程/多线程共享受限资源.md deleted file mode 100644 index 121799fd..00000000 --- a/Java基础教程/Java并发编程/多线程共享受限资源.md +++ /dev/null @@ -1,14 +0,0 @@ -# 多线程共享受限资源 - ----- - -## >多线程共享受限资源存在的问题 - - ----- - -* **这个描述???** - 当你坐在桌子旁边时,手里有有一把叉子,准备插起盘子里最后一块十五,当叉子碰到十五的时候,它忽然消失了。 - -* **解决方法** - 给这个资源加锁,每个线程访问这个资源时上锁,访问结束后开锁。 \ No newline at end of file diff --git a/Java基础教程/Java并发编程/多线程共享资源问题.md b/Java基础教程/Java并发编程/多线程共享资源问题.md deleted file mode 100644 index 121799fd..00000000 --- a/Java基础教程/Java并发编程/多线程共享资源问题.md +++ /dev/null @@ -1,14 +0,0 @@ -# 多线程共享受限资源 - ----- - -## >多线程共享受限资源存在的问题 - - ----- - -* **这个描述???** - 当你坐在桌子旁边时,手里有有一把叉子,准备插起盘子里最后一块十五,当叉子碰到十五的时候,它忽然消失了。 - -* **解决方法** - 给这个资源加锁,每个线程访问这个资源时上锁,访问结束后开锁。 \ No newline at end of file diff --git a/Java基础教程/Java并发编程/多线程基本操作.md b/Java基础教程/Java并发编程/多线程基本操作.md deleted file mode 100644 index a0eeb23b..00000000 --- a/Java基础教程/Java并发编程/多线程基本操作.md +++ /dev/null @@ -1,48 +0,0 @@ -# 多线程理论补充 - ------- - -## >让步机制 - ------ - -* **yield()** - thread.yield()线程执行这个函数会主动放弃执行的优先级,但只是暗示别的线程能够抢到更多的资源,没有确定的机制保证cpu资源一定被其他线程使用。 - -## >休眠机制 - ---- - -* **sleep()** - thread.sleep(30)线程停止执行30ms,可能会跑出异常,此线程调用interrupt()方法,中断了线程的执行。 - -## >优先权机制 - ----- - -* **setPriority()** - thread.setPriority()通过thread类中的常量对优先级进行设定。thread.getPriority()能够获取当前线程的优先级。 - -## >后台进程 - ------ - -* **后台线程(守护线程)thread.setDaemon()** - 程序运行时,在后台提供的一种通用的线程,当所有的非后台线程结束时,后台线程(守护线程)自动终止。必须在线程启动之前,调用方法setDaemon(),将线程设置成后台线程。isDeamon()判断是否为后台线程。 - -## >加入线程 - ----- - -* **t.join(a)** - t线程此时将被挂起,直到a线程结束才会被执行。当a线程结束时,t.isAlive()返回为假,线程恢复。 - -## >编码变体 - ------ - -* **implements Runnable** - 通过实现接口Runnable来达到作为线程类的方法。必须实现run方法。 - -* **建立有响应的用户界面** - 让运算作为一个独立的线程在后台独立运行。 diff --git a/Java基础教程/Java并发编程/多线程理论补充.md b/Java基础教程/Java并发编程/多线程理论补充.md deleted file mode 100644 index a0eeb23b..00000000 --- a/Java基础教程/Java并发编程/多线程理论补充.md +++ /dev/null @@ -1,48 +0,0 @@ -# 多线程理论补充 - ------- - -## >让步机制 - ------ - -* **yield()** - thread.yield()线程执行这个函数会主动放弃执行的优先级,但只是暗示别的线程能够抢到更多的资源,没有确定的机制保证cpu资源一定被其他线程使用。 - -## >休眠机制 - ---- - -* **sleep()** - thread.sleep(30)线程停止执行30ms,可能会跑出异常,此线程调用interrupt()方法,中断了线程的执行。 - -## >优先权机制 - ----- - -* **setPriority()** - thread.setPriority()通过thread类中的常量对优先级进行设定。thread.getPriority()能够获取当前线程的优先级。 - -## >后台进程 - ------ - -* **后台线程(守护线程)thread.setDaemon()** - 程序运行时,在后台提供的一种通用的线程,当所有的非后台线程结束时,后台线程(守护线程)自动终止。必须在线程启动之前,调用方法setDaemon(),将线程设置成后台线程。isDeamon()判断是否为后台线程。 - -## >加入线程 - ----- - -* **t.join(a)** - t线程此时将被挂起,直到a线程结束才会被执行。当a线程结束时,t.isAlive()返回为假,线程恢复。 - -## >编码变体 - ------ - -* **implements Runnable** - 通过实现接口Runnable来达到作为线程类的方法。必须实现run方法。 - -* **建立有响应的用户界面** - 让运算作为一个独立的线程在后台独立运行。 diff --git a/Java基础教程/Java并发编程/多线程的其他操作.md b/Java基础教程/Java并发编程/多线程的其他操作.md deleted file mode 100644 index 5fa17930..00000000 --- a/Java基础教程/Java并发编程/多线程的其他操作.md +++ /dev/null @@ -1,40 +0,0 @@ -# 多线程的应用 - ------- - -## 多线程停止线程 - ----- - -* stop方法已经过时不能使用,只能当run方法结束时,才能终止线程。开启多线程程运行时,代码通常是循环结构,只要控制住线程,通常可以让run方法结束。 -* 应当设计可以修改的无限循环标志。跳出无限循环,则会终止线程。 -* 当线程在循环内进入等待状态时,及时线程的循环条件不满足,必须终止线程,但是无法执行到判断语句进行线程的终止,此时,必须使用interrupt()函数来达到要求。 -* interrupt将处于冻结状态的线程强制转换到运行状态。此时wait()就会跑出我们处理已久的中断异常。 -* 当没有指定的方式让冻结的线程回复到运行状态时,这是需要对冻结进行清除。Thread提供了interrupt方法。 - - -## 多线程 守护线程 - ------ - -* 守护线程就是后台线程,也是一种依赖线程 -* 特点: - 当前台线程结束后,后台线程会自动终止,作为依赖线程,守护线程,不用强调结束。 -* 方法: - setDemon()设置某个线程为守护线程 - -## 多线程join方法 - ----- - -* t1.join() t1抢夺cpu执行权,主线程处于冻结状态,t1优先执行。相当于顺序执行两个线程。主线程碰到谁的join就会等谁执行。 -* 当A线程执行到了B线程的Join方法时,A线程就会等待,等B线程都执行完成,A才会执行。join才会临时加入线程执行。当B线程进入wait时,A线程也能继续执行。 -* toString 方法能够显示线程的名称,线程的优先级,线程当前的分组(线程组谁调用就是谁的线程组的) -* 所有线程包括主线程,默认是5。数越大优先级越高。MAX_PRIORITY,MIN_PRIORITY, -* yield()方法,当线程读到这里是,会释放执行权。这样会使所有的线程都有平均执行的效果。 - -## 什么时候会使用到多线程 - ----- - -* 当程序独立运算相互之间不相关的时候,可以用多线程封装一下,提高程序执行的速度 \ No newline at end of file diff --git a/Java基础教程/Java并发编程/多线程的应用.md b/Java基础教程/Java并发编程/多线程的应用.md deleted file mode 100644 index 5fa17930..00000000 --- a/Java基础教程/Java并发编程/多线程的应用.md +++ /dev/null @@ -1,40 +0,0 @@ -# 多线程的应用 - ------- - -## 多线程停止线程 - ----- - -* stop方法已经过时不能使用,只能当run方法结束时,才能终止线程。开启多线程程运行时,代码通常是循环结构,只要控制住线程,通常可以让run方法结束。 -* 应当设计可以修改的无限循环标志。跳出无限循环,则会终止线程。 -* 当线程在循环内进入等待状态时,及时线程的循环条件不满足,必须终止线程,但是无法执行到判断语句进行线程的终止,此时,必须使用interrupt()函数来达到要求。 -* interrupt将处于冻结状态的线程强制转换到运行状态。此时wait()就会跑出我们处理已久的中断异常。 -* 当没有指定的方式让冻结的线程回复到运行状态时,这是需要对冻结进行清除。Thread提供了interrupt方法。 - - -## 多线程 守护线程 - ------ - -* 守护线程就是后台线程,也是一种依赖线程 -* 特点: - 当前台线程结束后,后台线程会自动终止,作为依赖线程,守护线程,不用强调结束。 -* 方法: - setDemon()设置某个线程为守护线程 - -## 多线程join方法 - ----- - -* t1.join() t1抢夺cpu执行权,主线程处于冻结状态,t1优先执行。相当于顺序执行两个线程。主线程碰到谁的join就会等谁执行。 -* 当A线程执行到了B线程的Join方法时,A线程就会等待,等B线程都执行完成,A才会执行。join才会临时加入线程执行。当B线程进入wait时,A线程也能继续执行。 -* toString 方法能够显示线程的名称,线程的优先级,线程当前的分组(线程组谁调用就是谁的线程组的) -* 所有线程包括主线程,默认是5。数越大优先级越高。MAX_PRIORITY,MIN_PRIORITY, -* yield()方法,当线程读到这里是,会释放执行权。这样会使所有的线程都有平均执行的效果。 - -## 什么时候会使用到多线程 - ----- - -* 当程序独立运算相互之间不相关的时候,可以用多线程封装一下,提高程序执行的速度 \ No newline at end of file diff --git a/Java基础教程/Java并发编程/多线程通讯问题.md b/Java基础教程/Java并发编程/多线程通讯问题.md deleted file mode 100644 index bf7807e6..00000000 --- a/Java基础教程/Java并发编程/多线程通讯问题.md +++ /dev/null @@ -1,166 +0,0 @@ -# 多线程间的通讯 - ------ - -## 多线程通讯的定义: - ----- - -- 多个不同的线程对共同的数据进行不同的操作。 - -## 多线程通讯间的安全问题 - ------ - -* 安全问题的原因 - 例如当多个线程对同一个数据进行不同操作时,导致各种操作的先后顺序出现混乱。 -* 安全问题的解决方式 - 对这些线程操作数据的部分进行同步处理,使用相同的锁,将不同的部分锁起。 - -## 线程间通讯等待唤醒机制 - ------ - -* 可以模仿锁的工作原理(设置标志位,记录当前是够线程占用锁内的程序,实现只能有一个线程执行锁内代码的现象) -* 步骤: - 1. 设置标志位flag - 2. 当标志位处于输入状态时,执行输入程序,执行完成后修改为输出状态。 - 3. 当标志位处于输出状态时,执行输出程序,执行完成后修改为输入状态。 -## 等待唤醒机制的具体实现 - ----- - -* wait()和notify()函数必须在同步代码块或者同步函数当中使用。注意wait()会抛出中断异常。对持有监视器(锁)的线程进行操作。 -* wait()和notify()的操作对象是同步中持有当前锁的线程。 -* 线程的等待唤醒机制必须制定一把确定的锁。锁是任意的对象,任意对象都能成为锁,成为锁之后都能调用wait和notify的方法。而且这些方法都定义在Object类中。只有同一个锁上的被等待线程可以被同一个notify唤醒。等待唤醒必须是同一个锁。 - -## 使用新的工具类实现程序锁定和解锁 - ----- - - package painting; - - import java.util.concurrent.locks.Condition; - import java.util.concurrent.locks.Lock; - import java.util.concurrent.locks.ReentrantLock; - - /** - * @author 宙斯 - * - */ - public class LockerUsing { - - /** - * @param args - */ - public static void main(String[] args) { - Resource2 r = new Resource2(); - Produce2 pro = new Produce2(r); - Consumer2 con = new Consumer2(r); - - Thread t1 = new Thread(pro); - Thread t2 = new Thread(con); - Thread t3 = new Thread(pro); - Thread t4 = new Thread(con); - t1.start(); - t2.start(); - t3.start(); - t4.start(); - } - - } - class Resource2{ - private String name; - private int count =1; - private boolean flag = false; - private Lock lock = new ReentrantLock();//新建了一个锁对象 - private Condition condition_con = lock.newCondition();//生成了一个与锁相关的控制对象 - private Condition condition_pro = lock.newCondition(); - public void set(String name) throws InterruptedException{ - lock.lock(); - try{ - while(flag) - condition_pro.await(); - - this.name= name+"..."+count++; - System.out.println(Thread.currentThread().getName()+"生产者:"+this.name); - flag = true; - condition_con.signal(); - } - finally{ - lock.unlock();//异常处理当中释放锁的动过一定要被执行 - - } - } - public void out() throws InterruptedException{ - lock.lock(); - try{ - while(!flag) - condition_con.await(); - System.out.println(Thread.currentThread().getName()+"消费者:"+this.name); - flag = false; - condition_pro.signalAll(); - } - finally{ - lock.unlock(); - } - } - } - class Produce2 implements Runnable{ - private Resource2 res; - Produce2(Resource2 res){ - this.res = res; - - } - public void run() - { - while(true){ - try { - res.set("商品"); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - } - - class Consumer2 implements Runnable{ - private Resource2 res; - Consumer2(Resource2 res){ - this.res = res; - - } - public void run() - { - while(true){ - try { - res.out(); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - } - - -* 代码的解释: - - 1. 单线程 -----多线程-----多线程操作同一个数据源的时候实行同步机制------带有满足条件的同步机制(睡眠唤醒机制) - 2. 实现了多线程不同操作相同的程序,这个类具有模板的价值.对资源的不同操作写到资源类中,并使用this资源类的锁,对各种不同的操作进行上锁 - 3. 而非写到其他操作类中,这样能够将同步和冲突解决都封装到资源类中便于理解和操作。 - 4. 当线程数多于两个,比如此程序中有两个在生产两个在消费,那么标准的方式应该是通过循环判断标志位是否合格, - 因为当某个线程判断满足后,但在进入之前肯能被其他线程修改标志位。 - 而且必须使用notifyAll()唤醒所有的线程。 - 5. 使用Locker及其相关类的好处 - 一个Locker上可以有很多condition对象执行操作,也就是只唤醒对方的condition - jdk1.5实现了多线程的升级解决方案 - 将同步设置Synchronize替换成Lock操作,可见 - 将Object中wait,notify,notifyAll替换成Condition对象。该对象可以Locker锁进行获取 - - - - - - diff --git a/Java基础教程/Java并发编程/多线程间的通讯.md b/Java基础教程/Java并发编程/多线程间的通讯.md deleted file mode 100644 index bf7807e6..00000000 --- a/Java基础教程/Java并发编程/多线程间的通讯.md +++ /dev/null @@ -1,166 +0,0 @@ -# 多线程间的通讯 - ------ - -## 多线程通讯的定义: - ----- - -- 多个不同的线程对共同的数据进行不同的操作。 - -## 多线程通讯间的安全问题 - ------ - -* 安全问题的原因 - 例如当多个线程对同一个数据进行不同操作时,导致各种操作的先后顺序出现混乱。 -* 安全问题的解决方式 - 对这些线程操作数据的部分进行同步处理,使用相同的锁,将不同的部分锁起。 - -## 线程间通讯等待唤醒机制 - ------ - -* 可以模仿锁的工作原理(设置标志位,记录当前是够线程占用锁内的程序,实现只能有一个线程执行锁内代码的现象) -* 步骤: - 1. 设置标志位flag - 2. 当标志位处于输入状态时,执行输入程序,执行完成后修改为输出状态。 - 3. 当标志位处于输出状态时,执行输出程序,执行完成后修改为输入状态。 -## 等待唤醒机制的具体实现 - ----- - -* wait()和notify()函数必须在同步代码块或者同步函数当中使用。注意wait()会抛出中断异常。对持有监视器(锁)的线程进行操作。 -* wait()和notify()的操作对象是同步中持有当前锁的线程。 -* 线程的等待唤醒机制必须制定一把确定的锁。锁是任意的对象,任意对象都能成为锁,成为锁之后都能调用wait和notify的方法。而且这些方法都定义在Object类中。只有同一个锁上的被等待线程可以被同一个notify唤醒。等待唤醒必须是同一个锁。 - -## 使用新的工具类实现程序锁定和解锁 - ----- - - package painting; - - import java.util.concurrent.locks.Condition; - import java.util.concurrent.locks.Lock; - import java.util.concurrent.locks.ReentrantLock; - - /** - * @author 宙斯 - * - */ - public class LockerUsing { - - /** - * @param args - */ - public static void main(String[] args) { - Resource2 r = new Resource2(); - Produce2 pro = new Produce2(r); - Consumer2 con = new Consumer2(r); - - Thread t1 = new Thread(pro); - Thread t2 = new Thread(con); - Thread t3 = new Thread(pro); - Thread t4 = new Thread(con); - t1.start(); - t2.start(); - t3.start(); - t4.start(); - } - - } - class Resource2{ - private String name; - private int count =1; - private boolean flag = false; - private Lock lock = new ReentrantLock();//新建了一个锁对象 - private Condition condition_con = lock.newCondition();//生成了一个与锁相关的控制对象 - private Condition condition_pro = lock.newCondition(); - public void set(String name) throws InterruptedException{ - lock.lock(); - try{ - while(flag) - condition_pro.await(); - - this.name= name+"..."+count++; - System.out.println(Thread.currentThread().getName()+"生产者:"+this.name); - flag = true; - condition_con.signal(); - } - finally{ - lock.unlock();//异常处理当中释放锁的动过一定要被执行 - - } - } - public void out() throws InterruptedException{ - lock.lock(); - try{ - while(!flag) - condition_con.await(); - System.out.println(Thread.currentThread().getName()+"消费者:"+this.name); - flag = false; - condition_pro.signalAll(); - } - finally{ - lock.unlock(); - } - } - } - class Produce2 implements Runnable{ - private Resource2 res; - Produce2(Resource2 res){ - this.res = res; - - } - public void run() - { - while(true){ - try { - res.set("商品"); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - } - - class Consumer2 implements Runnable{ - private Resource2 res; - Consumer2(Resource2 res){ - this.res = res; - - } - public void run() - { - while(true){ - try { - res.out(); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - } - - -* 代码的解释: - - 1. 单线程 -----多线程-----多线程操作同一个数据源的时候实行同步机制------带有满足条件的同步机制(睡眠唤醒机制) - 2. 实现了多线程不同操作相同的程序,这个类具有模板的价值.对资源的不同操作写到资源类中,并使用this资源类的锁,对各种不同的操作进行上锁 - 3. 而非写到其他操作类中,这样能够将同步和冲突解决都封装到资源类中便于理解和操作。 - 4. 当线程数多于两个,比如此程序中有两个在生产两个在消费,那么标准的方式应该是通过循环判断标志位是否合格, - 因为当某个线程判断满足后,但在进入之前肯能被其他线程修改标志位。 - 而且必须使用notifyAll()唤醒所有的线程。 - 5. 使用Locker及其相关类的好处 - 一个Locker上可以有很多condition对象执行操作,也就是只唤醒对方的condition - jdk1.5实现了多线程的升级解决方案 - 将同步设置Synchronize替换成Lock操作,可见 - 将Object中wait,notify,notifyAll替换成Condition对象。该对象可以Locker锁进行获取 - - - - - - diff --git a/Java基础教程/Java并发编程/并发控制.md b/Java基础教程/Java并发编程/并发控制.md deleted file mode 100644 index abcd7c35..00000000 --- a/Java基础教程/Java并发编程/并发控制.md +++ /dev/null @@ -1,321 +0,0 @@ -# java并发控制 - -> 参考文献 -> * [并发编程](https://www.cnblogs.com/flashsun/p/10776168.html) -> * [java高并发编程](https://blog.csdn.net/cx105200/article/details/80220937) - - -synchronized 关键字 -可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。可能锁对象包括: this, 临界资源对象,Class 类对象 - -同步方法 -同步方法锁定的是当前对象。当多线程通过同一个对象引用多次调用当前同步方法时, 需同步执行。 - -public synchronized void test(){ - System.out.println("测试一下"); - } -1 -2 -3 -同步代码块 -同步代码块的同步粒度更加细致,是商业开发中推荐的编程方式。可以定位到具体的同步位置,而不是简单的将方法整体实现同步逻辑。在效率上,相对更高。 -锁定临界对象 -同步代码块在执行时,是锁定 object 对象。当多个线程调用同一个方法时,锁定对象不变的情况下,需同步执行。 - -public void test(){ - synchronized(o){ - System.out.println("测试一下"); - } - } -1 -2 -3 -4 -5 -锁定当前对象 - -public void test(){ - synchronized(this){ - System.out.println("测试一下"); - } - } -1 -2 -3 -4 -5 -锁的底层实现 -Java 虚拟机中的同步(Synchronization)基于进入和退出管程(Monitor)对象实现。同步方法 并不是由 monitor enter 和 monitor exit 指令来实现同步的,而是由方法调用指令读取运行时常量池中方法的 ACC_SYNCHRONIZED 标志来隐式实现的。 -对象内存简图 - -对象头:存储对象的 hashCode、锁信息或分代年龄或 GC 标志,类型指针指向对象的类元数据,JVM 通过这个指针确定该对象是哪个类的实例等信息。 -实例变量:存放类的属性数据信息,包括父类的属性信息 -填充数据:由于虚拟机要求对象起始地址必须是 8 字节的整数倍。填充数据不是必须存在的,仅仅是为了字节对齐 -当在对象上加锁时,数据是记录在对象头中。当执行 synchronized 同步方法或同步代码块时,会在对象头中记录锁标记,锁标记指向的是 monitor 对象(也称为管程或监视器锁) 的起始地址。每个对象都存在着一个 monitor 与之关联,对象与其 monitor 之间的关系有存在多种实现方式,如 monitor 可以与对象一起创建销毁或当线程试图获取对象锁时自动生成,但当一个 monitor 被某个线程持有后,它便处于锁定状态。 -在 Java 虚拟机(HotSpot)中,monitor 是由 ObjectMonitor 实现的。 -ObjectMonitor 中有两个队列,_WaitSet 和 _EntryList,以及_Owner 标记。其中_WaitSet 是用于管理等待队列(wait)线程的,_EntryList 是用于管理锁池阻塞线程的,_Owner 标记用于记录当前执行线程。线程状态图如下: - -这里写图片描述 - -当多线程并发访问同一个同步代码时,首先会进入_EntryList,当线程获取锁标记后, -monitor 中的_Owner 记录此线程,并在 monitor 中的计数器执行递增计算(+1),代表锁定,其他线程在_EntryList 中继续阻塞。若执行线程调用 wait 方法,则 monitor 中的计数器执行赋值为 0 计算,并将_Owner 标记赋值为 null,代表放弃锁,执行线程进如_WaitSet 中阻塞。若执行线程调用 notify/notifyAll 方法,_WaitSet 中的线程被唤醒,进入_EntryList 中阻塞,等待获取锁标记。若执行线程的同步代码执行结束,同样会释放锁标记,monitor 中的_Owner 标记赋值为 null,且计数器赋值为 0 计算。 - -锁的种类 -Java 中锁的种类大致分为偏向锁,自旋锁,轻量级锁,重量级锁。 -锁的使用方式为:先提供偏向锁,如果不满足的时候,升级为轻量级锁,再不满足,升级为重量级锁。自旋锁是一个过渡的锁状态,不是一种实际的锁类型。 -锁只能升级,不能降级。 - -重量级锁 - -在锁的底层实现中解释的就是重量级锁。 - -偏向锁 - -是一种编译解释锁。如果代码中不可能出现多线程并发争抢同一个锁的时候,JVM 编译代码,解释执行的时候,会自动的放弃同步信息。消除 synchronized 的同步代码结果。使用锁标记的形式记录锁状态。在 Monitor 中有变量 ACC_SYNCHRONIZED。当变量值使用的时候, 代表偏向锁锁定。可以避免锁的争抢和锁池状态的维护。提高效率。 - -轻量级锁 -过渡锁。当偏向锁不满足,也就是有多线程并发访问,锁定同一个对象的时候,先提升为轻量级锁。也是使用标记 ACC_SYNCHRONIZED 标记记录的。ACC_UNSYNCHRONIZED 标记记录未获取到锁信息的线程。就是只有两个线程争抢锁标记的时候,优先使用轻量级锁。 -两个线程也可能出现重量级锁。 - -自旋锁 -是一个过渡锁,是偏向锁和轻量级锁的过渡。 -当获取锁的过程中,未获取到。为了提高效率,JVM 自动执行若干次空循环,再次申请锁,而不是进入阻塞状态的情况。称为自旋锁。自旋锁提高效率就是避免线程状态的变更。 - -volatile 关键字 -变量的线程可见性。在 CPU 计算过程中,会将计算过程需要的数据加载到 CPU 计算缓存中,当 CPU 计算中断时,有可能刷新缓存,重新读取内存中的数据。在线程运行的过程中,如果某变量被其他线程修改,可能造成数据不一致的情况,从而导致结果错误。而 volatile 修饰的变量是线程可见的,当 JVM 解释 volatile 修饰的变量时,会通知 CPU,在计算过程中, 每次使用变量参与计算时,都会检查内存中的数据是否发生变化,而不是一直使用 CPU 缓存中的数据,可以保证计算结果的正确。 -volatile 只是通知底层计算时,CPU 检查内存数据,而不是让一个变量在多个线程中同步。 - -volatile int count = 0; -1 -wait¬ify -AtomicXxx 类型组 -原子类型。 -在 concurrent.atomic 包中定义了若干原子类型,这些类型中的每个方法都是保证了原子操作的。多线程并发访问原子类型对象中的方法,不会出现数据错误。在多线程开发中,如果某数据需要多个线程同时操作,且要求计算原子性,可以考虑使用原子类型对象。 - - AtomicInteger count = new AtomicInteger(0); - void m(){ - count.incrementAndGet(); - } -1 -2 -3 -4 -注意:原子类型中的方法是保证了原子操作,但多个方法之间是没有原子性的。如: - -AtomicInteger i = new AtomicInteger(0); -if(i.get() != 5){ - i.incrementAndGet(); -} -1 -2 -3 -4 -在上述代码中,get 方法和 incrementAndGet 方法都是原子操作,但复合使用时,无法保证原子性,仍旧可能出现数据错误。 - -CountDownLatch 门闩 -门闩是 concurrent 包中定义的一个类型,是用于多线程通讯的一个辅助类型。 -门闩相当于在一个门上加多个锁,当线程调用 await 方法时,会检查门闩数量,如果门 - -闩数量大于 0,线程会阻塞等待。当线程调用 countDown 时,会递减门闩的数量,当门闩数量为 0 时,await 阻塞线程可执行。 - -CountDownLatch latch = new CountDownLatch(5); - - void m1(){ - try { - latch.await();// 等待门闩开放。 - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println("m1() method"); - } - - void m2(){ - for(int i = 0; i < 10; i++){ - if(latch.getCount() != 0){ - System.out.println("latch count : " + latch.getCount()); - latch.countDown(); // 减门闩上的锁。 - } - try { - TimeUnit.MILLISECONDS.sleep(500); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - System.out.println("m2() method : " + i); - } -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -锁的重入 -在 Java 中,同步锁是可以重入的。只有同一线程调用同步方法或执行同步代码块,对同一个对象加锁时才可重入。 -当线程持有锁时,会在 monitor 的计数器中执行递增计算,若当前线程调用其他同步代码,且同步代码的锁对象相同时,monitor 中的计数器继续递增。每个同步代码执行结束, -monitor 中的计数器都会递减,直至所有同步代码执行结束,monitor 中的计数器为 0 时,释放锁标记,_Owner 标记赋值为 null。 - -ReentrantLock -重入锁,建议应用的同步方式。相对效率比 synchronized 高。量级较轻。 -synchronized 在 JDK1.5 版本开始,尝试优化。到 JDK1.7 版本后,优化效率已经非常好了。在绝对效率上,不比 reentrantLock 差多少。 -使用重入锁,必须必须必须手工释放锁标记。一般都是在 finally 代码块中定义释放锁标记的 unlock 方法。 - -公平锁 - -这里写图片描述 - -private static ReentrantLock lock = new ReentrantLock(true); - public void run(){ - for(int i = 0; i < 5; i++){ - lock.lock(); - try{ - System.out.println(Thread.currentThread().getName() + " get lock"); - }finally{ - lock.unlock(); - } - } - } -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -8ThreadLocal - -remove 问题 -这里写图片描述 - -同步容器 -解决并发情况下的容器线程安全问题的。给多线程环境准备一个线程安全的容器对象。线程安全的容器对象: Vector, Hashtable。线程安全容器对象,都是使用 synchronized -方法实现的。 -concurrent 包中的同步容器,大多数是使用系统底层技术实现的线程安全。类似 native。 -Java8 中使用 CAS。 - -Map/Set -ConcurrentHashMap/ConcurrentHashSet - -底层哈希实现的同步 Map(Set)。效率高,线程安全。使用系统底层技术实现线程安全。量级较 synchronized 低。key 和 value 不能为 null。 - -ConcurrentSkipListMap/ConcurrentSkipListSet - -底层跳表(SkipList)实现的同步 Map(Set)。有序,效率比 ConcurrentHashMap 稍低。 - -这里写图片描述 - -List -CopyOnWriteArrayList - -写时复制集合。写入效率低,读取效率高。每次写入数据,都会创建一个新的底层数组。 - -Queue -ConcurrentLinkedQueue - -基础链表同步队列。 - -LinkedBlockingQueue -阻塞队列,队列容量不足自动阻塞,队列容量为 0 自动阻塞。 - -ArrayBlockingQueue -底层数组实现的有界队列。自动阻塞。根据调用 API(add/put/offer)不同,有不同特性。 -当容量不足的时候,有阻塞能力。 -add 方法在容量不足的时候,抛出异常。 -put 方法在容量不足的时候,阻塞等待。 -offer 方法, -单参数 offer 方法,不阻塞。容量不足的时候,返回 false。当前新增数据操作放弃。三参数 offer 方法(offer(value,times,timeunit)),容量不足的时候,阻塞 times 时长(单 -位为 timeunit),如果在阻塞时长内,有容量空闲,新增数据返回 true。如果阻塞时长范围 -内,无容量空闲,放弃新增数据,返回 false。 - -DelayQueue -延时队列。根据比较机制,实现自定义处理顺序的队列。常用于定时任务。如:定时关机。 - -LinkedTransferQueue -转移队列,使用 transfer 方法,实现数据的即时处理。没有消费者,就阻塞。 - -SynchronusQueue -同步队列,是一个容量为 0 的队列。是一个特殊的 TransferQueue。必须现有消费线程等待,才能使用的队列。 -add 方法,无阻塞。若没有消费线程阻塞等待数据,则抛出异常。 -put 方法,有阻塞。若没有消费线程阻塞等待数据,则阻塞。 - -ThreadPool&Executor -Executor -线程池顶级接口。 -常用方法 - void execute(Runnable) -作用是: 启动线程任务的。 - -ExecutorService -Executor 接口的子接口。 -常见方法 - Future submit(Callable), Future submit(Runnable) - -Future -未来结果,代表线程任务执行结束后的结果。 - -Callable -可执行接口。 -接口方法 : Object call();相当于 Runnable 接口中的 run 方法。区别为此方法有返回值。不能抛出已检查异常。 -和 Runnable 接口的选择 - 需要返回值或需要抛出异常时,使用 Callable,其他情况可任意选择。 - -Executors -工具类型。为 Executor 线程池提供工具方法。类似 Arrays,Collections 等工具类型的功用。 - -FixedThreadPool -容量固定的线程池 -queued tasks - 任务队列 -completed tasks - 结束任务队列 - -CachedThreadPool -缓存的线程池。容量不限(Integer.MAX_VALUE)。自动扩容。默认线程空闲 60 秒,自动销毁。 - -ScheduledThreadPool -计划任务线程池。可以根据计划自动执行任务的线程池。 - -SingleThreadExceutor -单一容量的线程池。 - -ForkJoinPool -分支合并线程池(mapduce 类似的设计思想)。适合用于处理复杂任务。初始化线程容量与 CPU 核心数相关。 -线程池中运行的内容必须是 ForkJoinTask 的子类型(RecursiveTask,RecursiveAction)。 - -WorkStealingPool -JDK1.8 新增的线程池。工作窃取线程池。当线程池中有空闲连接时,自动到等待队列中窃取未完成任务,自动执行。 -初始化线程容量与 CPU 核心数相关。此线程池中维护的是精灵线程。 -ExecutorService.newWorkStealingPool(); - -ThreadPoolExecutor -线程池底层实现。除 ForkJoinPool 外,其他常用线程池底层都是使用 ThreadPoolExecutor -实现的。 -public ThreadPoolExecutor -(int corePoolSize, // 核心容量 - -int maximumPoolSize, // 最大容量 -long keepAliveTime, // 生命周期,0 为永久 -TimeUnit unit, // 生命周期单位 -BlockingQueue workQueue // 任务队列,阻塞队列。 -); - - - - diff --git a/Java基础教程/Java并发编程/并发控制的原理.md b/Java基础教程/Java并发编程/并发控制的原理.md deleted file mode 100644 index b7dcf486..00000000 --- a/Java基础教程/Java并发编程/并发控制的原理.md +++ /dev/null @@ -1,125 +0,0 @@ -# java并发机制与底层实现原理 -## 1 volatile -volatile是轻量级的synchronize,它在多处理器开发中保证了共享变量的“可见性”,因为它不会引起线程上下文的切换和调度,所以比synchronize的使用和执行成本更底。 -为了提高处理速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部缓存(L1,L2或其他)后再进行操作,但操作完不知道何时会写到内存。使用volatile变量,在操作后,JVM会发出lock指令 - -将当前处理器缓存行的数据写回到系统内存 -这个写回内存的操作会使在其他cpu里缓存了该内存地址的数据无效 - - - -## 2 synchronize -### 同步基础 -synchronize实现同步的基础,具体表现为三种形式 - -* 对于普通同步方法,锁是当前实例对象 -* 对于静态同步方法,锁是当前类的class对象 -* 对于同步方法块,锁是Synchronize括号里配置的对象 -* 当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。那么锁到底存在那里,锁里会存储什么信息。 - -### java对象头 -synchonize用的锁是存在java对象头里的。如果对象是数组类型,则JVM用三个字宽存储对象头,如果对象为非数组类型,则用二个字宽存储对象头。32位中,一字宽等于四字节(32bit) - - - - - - - - - - - - - - - - - - - - - - -
长度内容说明
32/64bitMark Word存储对象的hashCode或锁信息等。
32/64bitClass Metadata Address存储到对象类型数据的指针
32/64bitArray length数组的长度(如果当前对象是数组)
- -在运行期间Mark Word里存存储的数据会随着锁标志位的变化而变化。会成为下面的一种 - -![](image/2021-09-06-21-50-41.png) - - -## 3 锁类型 -为了减少获得锁与释放锁所带来的性能消耗,引入“偏向锁”和“轻量级锁'.所以在java中存在四种状态 - -* 无锁状态 -* 偏向锁状态 -* 轻量级锁状态 -* 自旋锁 -* 重量级锁状态 - - -它会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁 - -### 偏向锁 -Hotspot的作者经过以往的研究发现大多数情况下锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。当一个线程访问同步块并获取锁时,会在对象头和栈帧中的锁记录里存储锁偏向的线程ID,以后该线程在进入和退出同步块时不需要花费CAS操作来加锁和解锁。 - -流程图中展示偏向锁的获取释放以及升级至轻量锁 - -![](image/2021-09-06-21-51-16.png) - -### 轻量级锁 -1. 轻量级锁加锁: -线程在执行同步块之前,JVM会先在当前线程的栈桢中创建用于存储锁记录的空间,并将对象头中的Mark Word复制到锁记录中,官方称为Displaced Mark Word。然后线程尝试使用CAS将对象头中的Mark Word替换为指向锁记录的指针。如果成功,当前线程获得锁,如果失败,表示其他线程竞争锁,当前线程便尝试使用自旋来获取锁。 - -2. 轻量级锁解锁 -轻量级解锁时,会使用原子的CAS操作来将Displaced Mark Word替换回到对象头,如果成功,则表示没有竞争发生。如果失败,表示当前锁存在竞争,锁就会膨胀成重量级锁。下图是两个线程同时争夺锁,导致锁膨胀的流程图。 - - -借用网上流程图如下: -![](image/2021-09-06-21-51-37.png) - -### 自旋锁 -当竟争存在时,如果线程可以很快获得锁,那么可以不在OS层挂起线程(线程切换平均消耗8K个时钟周期),让线程多做几个空操作(自旋) - -1. 如果同步块过长,自旋失败,会降低系统性能 -2. 如果同步块很短,自旋成功,节省线程挂起切换时间,担升系统性能 - -## 4 锁对比 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
优点缺点适用场景
偏向锁加锁和解锁不需要额外的消耗,和执行非同步方法比仅存在纳秒级的差距。如果线程间存在锁竞争,会带来额外的锁撤销的消耗。适用于只有一个线程访问同步块场景。</td
轻量级锁竞争的线程不会阻塞,提高了程序的响应速度。如果始终得不到锁竞争的线程使用自旋会消耗CPU追求响应时间。同步块执行速度非常快。
重量级锁线程竞争不使用自旋,不会消耗CPU。线程阻塞,响应时间缓慢。追求吞吐量。同步块执行速度较长。
- - - -总结 -* 偏向锁,轻量级锁,自旋锁不是JAVA语言层上的优化方法 -* 内置于JVM中的获取锁的优化方法与获取锁的步骤 - * 偏向锁可用可先尝试偏向锁 - * 轻量级锁可用可先尝试轻量级锁 - * 1与2都失败,则尝试自旋锁 - * 再失败,尝试普通锁,使用OS互斥量在操作系统层挂起 \ No newline at end of file diff --git a/Java基础教程/Java并发编程/并发机制.md b/Java基础教程/Java并发编程/并发机制.md deleted file mode 100644 index 07d4f76f..00000000 --- a/Java基础教程/Java并发编程/并发机制.md +++ /dev/null @@ -1,284 +0,0 @@ -# java并发机制 - - - -## java多线程 - -### 继承Thread类 -Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动方法就是通过继承了Thread类的start()实例方法。执行run()方法(重写的)。就可以启动新线程并执行自己定义。例如: -```java -//实现方法的类 -public class Demo1 extends Thread { - - public void run(){ - System.out.println("继承Thread类"); - } -} - -//执行的方法 -public static void main(String[] args) { - - Demo1 demo1=new Demo1(); - demo1.start(); -} -``` - -### 实现Runnable接口 -由于java是单继承的,那么在平时开发中就提倡使用接口的方式实现。则需要实现多线程的类通过实现Runnable接口的run方法。通过Thread的start()方法进行启动,例如: - -```java -//实现的方法类: -public class Demo2 implements Runnable { - -@Override -public void run() { - System.out.println("实现runnable接口"); -} - -//执行方法: -public static void main(String[] args) { - - Demo2 demo2=new Demo2(); - Thread thread=new Thread(demo2); - thread.start(); -} -``` -### 通过内部类的方式实现多线程 -直接可以通过Thread类的start()方法进行实现,因为Thread类实现了Runnable接口,并重写了run方法,在run方法中实现自己的逻辑,例如: - -```java -//这里通过了CountDownLatch,来进行阻塞,来观察两个线程的启动,这样更加体现的明显一些: -public static CountDownLatch countDownLatch=new CountDownLatch(2); - -public static void main(String[] args) { - new Thread(()->{ - countDownLatch.countDown(); - try { - countDownLatch.await(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println("T1"); - }).start(); - - new Thread(()->{ - countDownLatch.countDown(); - try { - countDownLatch.await(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println("T2"); - }).start(); -} -``` - -### 通过实现Callable接口 -通过实现Callable接口的call方法,可以通过FutureTask的get()方法来获取call方法中的返回值,具体实现如下: - -```java -//实现类方法: -public class Demo3 implements Callable { - -@Override -public Object call() { - return "1"; -} -} - -//执行方法: -public static void main(String[] args) { - - //创建实现类对象 - Callable demo3=new Demo3(); - FutureTask oneTask = new FutureTask(demo3); - Thread thread=new Thread(oneTask); - thread.start(); - Object o = null; - try { - //获取返回值 - o = oneTask.get(); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - System.out.println(o); -} -``` - -### 通过线程池来实现多线程 -线程池可以根据不同的场景来选择不同的线程池来进行实现,这里我仅使用其中之一进行演示,后续会单独写一个线程池相关的单独介绍: - -```java -//实现代码如下: -public class Demo5 { - - public static void main(String[] args) { - ExecutorService executorService = Executors.newFixedThreadPool(5); - for(int i=0;i<5;i++){ - int finalI = i; - executorService.execute(()-> { - System.out.println(finalI); - }); - } - } -} -``` - -### 通过Timer定时器来实现多线程 -就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,同样根据参数得不同存在多种执行方式,例如其中延迟定时任务这样: - -``` -//具体代码如下: -public class Demo6 { - - public static void main(String[] args) { - Timer timer=new Timer(); - timer.schedule(new TimerTask(){ - @Override - public void run() { - System.out.println(1); - } - },2000l,1000l); - } -} -``` - -### 通过stream实现多线程 -jdk1.8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 -Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 -具体简单代码实现如下: - -``` -//代码实现: -public class Demo7 { - -//为了更形象体现并发,通过countDownLatch进行阻塞 -static CountDownLatch countDownLatch=new CountDownLatch(6); - public static void main(String[] args) { - List list=new ArrayList<>(); - list.add(1); - list.add(2); - list.add(3); - list.add(4); - list.add(5); - list.add(6); - - list.parallelStream().forEach(p->{ - //将所有请求在打印之前进行阻塞,方便观察 - countDownLatch.countDown(); - try { - System.out.println("线程执行到这里啦"); - Thread.sleep(10000); - countDownLatch.await(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println(p); - }); - } -} -``` -## java异步IO - - -### java NIO -> 参考文献 -> * [java nio一篇博客](https://blog.csdn.net/forezp/article/details/88414741) -> * [java nio并发编程网](http://ifeve.com/overview/) - - - -### java akka - -1. 前情提要 -面向对象编程理论中,对象之间通信,依赖的是消息,但java里,对象之间通信,用的是对象方法 - -2. Actor模型 -计算模型,计算单位Actor,所有的计算都在Actor中执行。Actor中一切都是actor,actor之间完全隔离,不共享任何变量。不共享变量,就不会有并发问题。java本身不支持actor模型,需要引入第三方类库Akka - -3. 代码范例 -``` -//该Actor当收到消息message后, -//会打印Hello message -static class HelloActor - extends UntypedActor { - @Override - public void onReceive(Object message) { - System.out.println("Hello " + message); - } -} - -public static void main(String[] args) { - //创建Actor系统 - ActorSystem system = ActorSystem.create("HelloSystem"); - //创建HelloActor - ActorRef helloActor = - system.actorOf(Props.create(HelloActor.class)); - //发送消息给HelloActor - helloActor.tell("Actor", ActorRef.noSender()); -} -``` -actor之间通信完美遵循了消息机制。而不是通过调用对象的方式 - -4. 消息和对象方法的区别 -actor内部有一个邮箱mailbox,接受到的消息先放到邮箱,如果有积压,新消息不会马上得到处理。actor是单线程处理消息。所以不会有并发问题 -说白了,就是消费者线程的生产者-消费者模式 - -5. 区别 -对相关的方法调用,一般是同步的,而actor的消息机制是异步的。 - -6. Actor规范定义 - 1. 处理能力,处理接收到的消息 - 2. 存储能力,actor可以存储自己的内部状态 - 3. 通信能力,actor可以和其他actor之间通信 -7. actor实现线程安全的累加器 -无锁算法,因为只有1个线程在消费,不会存在并发问题 - -``` -//累加器 -static class CounterActor extends UntypedActor { - private int counter = 0; - @Override - public void onReceive(Object message){ - //如果接收到的消息是数字类型,执行累加操作, - //否则打印counter的值 - if (message instanceof Number) { - counter += ((Number) message).intValue(); - } else { - System.out.println(counter); - } - } -} -public static void main(String[] args) throws InterruptedException { - //创建Actor系统 - ActorSystem system = ActorSystem.create("HelloSystem"); - //4个线程生产消息 - ExecutorService es = Executors.newFixedThreadPool(4); - //创建CounterActor - ActorRef counterActor = - system.actorOf(Props.create(CounterActor.class)); - //生产4*100000个消息 - for (int i=0; i<4; i++) { - es.execute(()->{ - for (int j=0; j<100000; j++) { - counterActor.tell(1, ActorRef.noSender()); - } - }); - } - //关闭线程池 - es.shutdown(); - //等待CounterActor处理完所有消息 - Thread.sleep(1000); - //打印结果 - counterActor.tell("", ActorRef.noSender()); - //关闭Actor系统 - system.shutdown(); -} -``` -8. 总结 -actor计算模型,基本计算单元。消息通信。 - -9. 应用 -spark,filink,play \ No newline at end of file diff --git a/Java基础教程/Java并发编程/并发通信.md b/Java基础教程/Java并发编程/并发通信.md deleted file mode 100644 index e69de29b..00000000 diff --git a/Java基础教程/Java并发编程/底层事件处理.md b/Java基础教程/Java并发编程/底层事件处理.md deleted file mode 100644 index 3422200c..00000000 --- a/Java基础教程/Java并发编程/底层事件处理.md +++ /dev/null @@ -1,5 +0,0 @@ -# 底层事件处理 - ------ - -* 在java.awt学习的时候,将监听器绑定到事件源上,当指定事件发生时监听器会自动匹配到相应的动作,执行相应的处理方式。但在底层事件处理过程中,不许要监听器,能够直接获取当前发生的底层事件,然后进行匹配处理。 \ No newline at end of file diff --git a/Java基础教程/Java语言基础/04 Java数组.md b/Java基础教程/Java语言基础/04 Java数组.md index e6dd5168..10936283 100644 --- a/Java基础教程/Java语言基础/04 Java数组.md +++ b/Java基础教程/Java语言基础/04 Java数组.md @@ -133,12 +133,17 @@ s[1][2] = new String("!"); ### 具体方法 - -* public static int binarySearch(Object[] a, Object key) +```java +public static int binarySearch(Object[] a, Object key) 用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。 -* public static boolean equals(long[] a, long[] a2) +public static boolean equals(long[] a, long[] a2) 如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 -* public static void fill(int[] a, int val) +public static void fill(int[] a, int val) 将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 -* public static void sort(Object[] a) -对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 \ No newline at end of file +public static void sort(Object[] a) +对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 +public static void toString(array[]) +依次打印元素 +public static void stream() +转化成一个流 +``` \ No newline at end of file diff --git a/Java基础教程/Java语言基础/17 流式编程.md b/Java基础教程/Java语言基础/17 流式编程.md deleted file mode 100644 index 68f1a5b9..00000000 --- a/Java基础教程/Java语言基础/17 流式编程.md +++ /dev/null @@ -1 +0,0 @@ -Builder & StreamOf & Optional \ No newline at end of file diff --git a/Java基础教程/Java集合类/15 Java容器底层结构.md b/Java基础教程/Java集合类/01 集合底层结构.md similarity index 100% rename from Java基础教程/Java集合类/15 Java容器底层结构.md rename to Java基础教程/Java集合类/01 集合底层结构.md diff --git a/Java基础教程/Java集合类/02 JavaCollection.md b/Java基础教程/Java集合类/02 JavaCollection.md index 1483cde1..4cc265c7 100644 --- a/Java基础教程/Java集合类/02 JavaCollection.md +++ b/Java基础教程/Java集合类/02 JavaCollection.md @@ -19,18 +19,31 @@ C++中的容器分为(都是线性的) * queue 队列 -Java中的容器分为(都是线性的) -* 集合collection - * List - * Queue - * Set - * Map +Java中的容器分为(都是线性的)集合collection。除了一下基本集合类型,还有多个特殊的类型,后续补充 +* List + * Arraylist,有序,插入序 + * vector + * stack +* Queue + * linkedlist,双端队列有序,插入序 + * arrayqueue,有序,插入序 + * priorityQueue,有序,自然序 +* Set + * hashset,无序 + * linkedhashset,有序,插入序 + * treeSet,有序,自然序 +* Map + * hashmap,无序 + * linkedhashmap,有序,插入序 + * treemap 有序,自然序 ![](image/2022-11-08-10-51-54.png) ![](image/2022-11-08-10-54-19.png) ![](image/2022-12-04-22-53-11.png) + +![](image/2022-12-15-17-11-05.png) ## 体系 + [Java 集合 - `List`](2.md) @@ -61,4 +74,24 @@ Java中的容器分为(都是线性的) 6. `List`内部存储一系列**可重复**的对象,是一个**有序**集合,对象按插入顺序排列 7. `Queue`是一个**队列**容器,其特性与`List`相同,但只能从`队头`和`队尾`操作元素 8. JDK 为集合的各种操作提供了两个工具类`Collections`和`Arrays`,之后会讲解工具类的常用方法 -9. 四种抽象集合类型内部也会衍生出许多具有不同特性的集合类,**不同场景下择优使用,没有最佳的集合** \ No newline at end of file +9. 四种抽象集合类型内部也会衍生出许多具有不同特性的集合类,**不同场景下择优使用,没有最佳的集合** + + +## 对比 + + +章节结束各集合总结:(以 JDK1.8 为例) + +| 数据类型 | 插入、删除时间复杂度 | 查询时间复杂度 | 底层数据结构 | 是否线程安全 | +| :------------ | :------------------- | :------------- | :------------------- | :----------- | +| Vector | O(N) | O(1) | 数组 | 是(已淘汰) | +| ArrayList | O(N) | O(1) | 数组 | 否 | +| LinkedList | O(1) | O(N) | 双向链表 | 否 | +| HashSet | O(1) | O(1) | 数组+链表+红黑树 | 否 | +| TreeSet | O(logN) | O(logN) | 红黑树 | 否 | +| LinkedHashSet | O(1) | O(1)~O(N) | 数组 + 链表 + 红黑树 | 否 | +| ArrayDeque | O(N) | O(1) | 数组 | 否 | +| PriorityQueue | O(logN) | O(logN) | 堆(数组实现) | 否 | +| HashMap | O(1) ~ O(N) | O(1) ~ O(N) | 数组+链表+红黑树 | 否 | +| TreeMap | O(logN) | O(logN) | 数组+红黑树 | 否 | +| HashTable | O(1) / O(N) | O(1) / O(N) | 数组+链表 | 是(已淘汰) | \ No newline at end of file diff --git a/Java基础教程/Java集合类/03 List-ArrayList.md b/Java基础教程/Java集合类/03 List.md similarity index 87% rename from Java基础教程/Java集合类/03 List-ArrayList.md rename to Java基础教程/Java集合类/03 List.md index 452c55cb..a866c5dc 100644 --- a/Java基础教程/Java集合类/03 List-ArrayList.md +++ b/Java基础教程/Java集合类/03 List.md @@ -1,6 +1,6 @@ # List 接口 -## 1 概述 +## 0 概述 ### 简介 List 接口和 Set 接口齐头并进,是我们日常开发中接触的很多的一种集合类型了。整个 List 集合的组成部分如下图 @@ -27,9 +27,9 @@ AbstractSequentialList 抽象类继承了 AbstractList,在原基础上限制 -## 2 ArrayList +## 1 ArrayList -### 概述 +### 底层原理 ArrayList 以**数组**作为存储结构,它是**线程不安全**的集合;具有**查询快、在数组中间或头部增删慢**的特点,所以它除了线程不安全这一点,其余可以替代`Vector`,而且线程安全的 ArrayList 可以使用 `CopyOnWriteArrayList`代替 Vector。 ![](image/2022-12-04-22-17-09.png) @@ -539,51 +539,10 @@ public class ArrayListExample } ``` -## 3 LinkedList +## 2 Vector +### 底层原理 -LinkedList 底层采用`双向链表`数据结构存储元素,由于链表的内存地址`非连续`,所以它不具备随机访问的特点,但由于它利用指针连接各个元素,所以插入、删除元素只需要`操作指针`,不需要`移动元素`,故具有**增删快、查询慢**的特点。它也是一个非线程安全的集合。 - -![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1595393003456-d37281f4-8332-46b4-9d81-e1f0c24dc060.png) - -由于以双向链表作为数据结构,它是**线程不安全**的集合;存储的每个节点称为一个`Node`,下图可以看到 Node 中保存了`next`和`prev`指针,`item`是该节点的值。在插入和删除时,时间复杂度都保持为 `O(1)` - -![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1595725358023-1f64f780-9dd0-47ff-a84c-d4101d16c1e1.png) - -关于 LinkedList,除了它是以链表实现的集合外,还有一些特殊的特性需要注意的。 - -- 优势:LinkedList 底层没有`扩容机制`,使用`双向链表`存储元素,所以插入和删除元素效率较高,适用于频繁操作元素的场景 -- 劣势:LinkedList 不具备`随机访问`的特点,查找某个元素只能从 `head` 或 `tail` 指针一个一个比较,所以**查找中间的元素时效率很低** -- 查找优化:LinkedList 查找某个下标 `index` 的元素时**做了优化**,若 `index > (size / 2)`,则从 `head` 往后查找,否则从 `tail` 开始往前查找,代码如下所示: - -```Java -LinkedList.Node node(int index) { - LinkedList.Node x; - int i; - if (index < this.size >> 1) { // 查找的下标处于链表前半部分则从头找 - x = this.first; - for(i = 0; i < index; ++i) { x = x.next; } - return x; - } else { // 查找的下标处于数组的后半部分则从尾开始找 - x = this.last; - for(i = this.size - 1; i > index; --i) { x = x.prev; } - return x; - } -} -``` - -- 双端队列:使用双端链表实现,并且实现了 `Deque` 接口,使得 LinkedList 可以用作**双端队列**。下图可以看到 Node 是集合中的元素,提供了前驱指针和后继指针,还提供了一系列操作`头结点`和`尾结点`的方法,具有双端队列的特性。 - -![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1595693779116-a8156f03-36fa-4557-892e-ea5103b06136.png) - -LinkedList 集合最让人树枝的是它的链表结构,但是我们同时也要注意它是一个双端队列型的集合。 - -```java -Deque deque = new LinkedList<>(); -``` - -### Vector - -![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1595375364068-c2c49168-a2f4-4a06-97c0-eb3446d60a68.png) +![](image/2022-12-15-17-14-17.png) `Vector` 在现在已经是一种过时的集合了,包括继承它的 `Stack` 集合也如此,它们被淘汰的原因都是因为**性能**低下。 @@ -598,8 +557,9 @@ public synchronized E get(int index); 现在,在**线程安全**的情况下,不需要选用 Vector 集合,取而代之的是 **ArrayList** 集合;在并发环境下,出现了 `CopyOnWriteArrayList`,Vector 完全被弃用了。 -### Stack +## 3 Stack +### 底层原理 ![img](https://cdn.nlark.com/yuque/0/2020/png/1694029/1596126551356-dc1af780-2fe9-4d04-8351-e70637ecdab5.png) `Stack`是一种`后入先出(LIFO)`型的集合容器,如图中所示,`大雄`是最后一个进入容器的,top指针指向大雄,那么弹出元素时,大雄也是第一个被弹出去的。 @@ -613,4 +573,57 @@ Deque stack = new ArrayDeque(); ``` ArrayDeque 的数据结构是:`数组`,并提供**头尾指针下标**对数组元素进行操作。本文也会讲到哦,客官请继续往下看,莫着急!:smile: - \ No newline at end of file + + +## 4 CopyOnWriteArrayList +> 用来替代vector,提供现成安全的list +### 底层原理 + +Java CopyOnWriteArrayList是ArrayList的thread-safe变体,其中所有可变操作(添加,设置等)都通过对基础array进行全新复制来实现。 + +* CopyOnWriteArrayList类实现List和RandomAccess接口,因此提供ArrayList类中可用的所有功能。 +* 使用CopyOnWriteArrayList进行更新操作的成本很高,因为每个突变都会创建基础数组的克隆副本,并为其添加/更新元素。 +* 它是ArrayList的线程安全版本。 每个访问列表的线程在初始化此列表的迭代器时都会看到自己创建的后备阵列快照版本。 +* 因为它在创建迭代器时获取基础数组的快照,所以它不会抛出ConcurrentModificationException 。 +* 不支持对迭代器的删除操作(删除,设置和添加)。 这些方法抛出UnsupportedOperationException 。 +* CopyOnWriteArrayList是synchronized List的并发替代,当迭代的次数超过突变次数时,CopyOnWriteArrayList可以提供更好的并发性。 +* 它允许重复的元素和异构对象(使用泛型来获取编译时错误)。因为它每次创建迭代器时都会创建一个新的数组副本,所以performance is slower比ArrayList performance is slower 。 + + +### 实例 + +```java +CopyOnWriteArrayList list = new CopyOnWriteArrayList<>(new Integer[] {1,2,3}); + +System.out.println(list); //[1, 2, 3] + +//Get iterator 1 +Iterator itr1 = list.iterator(); + +//Add one element and verify list is updated +list.add(4); + +System.out.println(list); //[1, 2, 3, 4] + +//Get iterator 2 +Iterator itr2 = list.iterator(); + +System.out.println("====Verify Iterator 1 content===="); + +itr1.forEachRemaining(System.out :: println); //1,2,3 + +System.out.println("====Verify Iterator 2 content===="); + +itr2.forEachRemaining(System.out :: println); //1,2,3,4 +``` + +### 主要方法 + +```java +CopyOnWriteArrayList() :创建一个空列表。 +CopyOnWriteArrayList(Collection c) :创建一个列表,该列表包含指定集合的​​元素,并按集合的迭代器返回它们的顺序。 +CopyOnWriteArrayList(object[] array) :创建一个保存给定数组副本的列表。 +boolean addIfAbsent(object o) :如果不存在则追加元素。 +int addAllAbsent(Collection c) :以指定集合的​​迭代器返回的顺序,将指定集合中尚未包含在此列表中的所有元素追加到此列表的末尾。 +``` + diff --git a/Java基础教程/Java集合类/04 Queue.md b/Java基础教程/Java集合类/04 Queue.md new file mode 100644 index 00000000..29a7105f --- /dev/null +++ b/Java基础教程/Java集合类/04 Queue.md @@ -0,0 +1,531 @@ +# Queue + + +## 0 Queue介绍 + +### 主要方法 +`Queue`队列,在 JDK 中有两种不同类型的集合实现:**单向队列**(AbstractQueue) 和 **双端队列**(Deque) + +![img](https://cdn.nlark.com/yuque/0/2020/png/1694029/1595684241064-e863aeca-6a95-4423-92c4-762f56be1dbe.png) + +Queue 中提供了两套增加、删除元素的 API,当插入或删除元素失败时,会有**两种不同的失败处理策略**。 + +| 方法及失败策略 | 插入方法 | 删除方法 | 查找方法 | +| :------------- | :------- | :------- | -------- | +| 抛出异常 | add() | remove() | get() | +| 返回失败默认值 | offer() | poll() | peek() | + +选取哪种方法的决定因素:插入和删除元素失败时,希望`抛出异常`还是返回`布尔值` + +`add()` 和 `offer()` 对比: + +在队列长度大小确定的场景下,队列放满元素后,添加下一个元素时,add() 会抛出 `IllegalStateException`异常,而 `offer()` 会返回 `false` 。 + +但是它们两个方法在插入**某些不合法的元素**时都会抛出三个相同的异常。 + +![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1595691512036-ed9fd3ea-5432-4105-a3fb-a5374d571971.png) + +`remove()` 和 `poll()` 对比: + +在**队列为空**的场景下, `remove()` 会抛出 `NoSuchElementException`异常,而 `poll()` 则返回 `null` 。 + +`get()`和`peek()`对比: + +在队列为空的情况下,`get()`会抛出`NoSuchElementException`异常,而`peek()`则返回`null`。 + + +### Deque 接口 + +`Deque` 接口的实现非常好理解:从**单向**队列演变为**双向**队列,内部额外提供**双向队列的操作方法**即可: + +![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1596166722772-975ff644-6abf-441b-b678-4a6de5b0eef1.png) + +Deque 接口额外提供了**针对队列的头结点和尾结点**操作的方法,而**插入、删除方法同样也提供了两套不同的失败策略**。除了`add()`和`offer()`,`remove()`和`poll()`以外,还有`get()`和`peek()`出现了不同的策略 + +### AbstractQueue 抽象类 + +AbstractQueue 类中提供了各个 API 的基本实现,主要针对各个不同的处理策略给出基本的方法实现,定义在这里的作用是让`子类`根据其`方法规范`(操作失败时抛出异常还是返回默认值)实现具体的业务逻辑。 + +![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1596167156067-36121579-8127-4019-ba47-e4de73f05cda.png) + + +## 1 LinkedList + +### 继承关系 + +![](image/2022-12-15-16-55-23.png) + +### 底层实现 + +LinkedList 底层采用`双向链表`数据结构存储元素,由于链表的内存地址`非连续`,所以它不具备随机访问的特点,但由于它利用指针连接各个元素,所以插入、删除元素只需要`操作指针`,不需要`移动元素`,故具有**增删快、查询慢**的特点。它也是一个非线程安全的集合。 + +![](image/2022-12-15-16-54-49.png) + + + +由于以双向链表作为数据结构,它是**线程不安全**的集合;存储的每个节点称为一个`Node`,下图可以看到 Node 中保存了`next`和`prev`指针,`item`是该节点的值。在插入和删除时,时间复杂度都保持为 `O(1)` + +![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1595725358023-1f64f780-9dd0-47ff-a84c-d4101d16c1e1.png) + +关于 LinkedList,除了它是以链表实现的集合外,还有一些特殊的特性需要注意的。 + +- 优势:LinkedList 底层没有`扩容机制`,使用`双向链表`存储元素,所以插入和删除元素效率较高,适用于频繁操作元素的场景 +- 劣势:LinkedList 不具备`随机访问`的特点,查找某个元素只能从 `head` 或 `tail` 指针一个一个比较,所以**查找中间的元素时效率很低** +- 查找优化:LinkedList 查找某个下标 `index` 的元素时**做了优化**,若 `index > (size / 2)`,则从 `head` 往后查找,否则从 `tail` 开始往前查找,代码如下所示: + +```Java +LinkedList.Node node(int index) { + LinkedList.Node x; + int i; + if (index < this.size >> 1) { // 查找的下标处于链表前半部分则从头找 + x = this.first; + for(i = 0; i < index; ++i) { x = x.next; } + return x; + } else { // 查找的下标处于数组的后半部分则从尾开始找 + x = this.last; + for(i = this.size - 1; i > index; --i) { x = x.prev; } + return x; + } +} +``` + +- 双端队列:使用双端链表实现,并且实现了 `Deque` 接口,使得 LinkedList 可以用作**双端队列**。下图可以看到 Node 是集合中的元素,提供了前驱指针和后继指针,还提供了一系列操作`头结点`和`尾结点`的方法,具有双端队列的特性。 + +![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1595693779116-a8156f03-36fa-4557-892e-ea5103b06136.png) + +LinkedList 集合最让人树枝的是它的链表结构,但是我们同时也要注意它是一个双端队列型的集合。 + +```java +Deque deque = new LinkedList<>(); +``` + +### 常用方法 + + +```java +LinkedList() :初始化一个空的LinkedList实现。 +LinkedListExample(Collection c) :初始化一个LinkedList,该LinkedList包含指定集合的​​元素,并按集合的迭代器返回它们的顺序。 +boolean add(Object o) :将指定的元素追加到列表的末尾。 +void add(int index,Object element) :将指定的元素插入列表中指定位置的索引处。 +void addFirst(Object o) :将给定元素插入列表的开头。 +void addLast(Object o) :将给定元素附加到列表的末尾。 +int size() :返回列表中的元素数 +boolean contains(Object o) :如果列表包含指定的元素,则返回true ,否则返回false 。 +boolean remove(Object o) :删除列表中指定元素的第一次出现。 +Object getFirst() :返回列表中的第一个元素。 +Object getLast() :返回列表中的最后一个元素。 +int indexOf(Object o) :返回指定元素首次出现的列表中的索引;如果列表不包含指定元素,则返回-1。 +lastIndexOf(Object o) :返回指定元素最后一次出现的列表中的索引;如果列表不包含指定元素,则返回-1。 +Iterator iterator() :以适当的顺序返回对该列表中的元素进行迭代的迭代器。 +Object[] toArray() :以正确的顺序返回包含此列表中所有元素的数组。 +List subList(int fromIndex,int toIndex) :返回此列表中指定的fromIndex(包括)和toIndex(不包括)之间的视图。 +``` + +### LinkedList与ArrayList + +* ArrayList是使用动态可调整大小的数组的概念实现的。 而LinkedList是双向链表实现。 +* ArrayList允许随机访问其元素,而LinkedList则不允许。 +* LinkedList还实现了Queue接口,该接口添加了比ArrayList更多的方法,例如offer(),peek(),poll()等。 +* 与LinkedList相比, ArrayList添加和删​​除速度较慢,但​​在获取时却较快,因为如果LinkedList中的array已满,则无需调整数组大小并将内容复制到新数组。 +* LinkedList比ArrayList具有更多的内存开销,因为在ArrayList中,每个索引仅保存实际对象,但是在LinkedList的情况下,每个节点都保存下一个和上一个节点的数据和地址。 + + +## 2 ArrayDeque + +使用**数组**实现的双端队列,它是**无界**的双端队列,最小的容量是`8`(JDK 1.8)。在 JDK 11 看到它默认容量已经是 `16`了。 + +![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1595695213834-cb4f1c3a-e07a-42aa-981f-31a896febe26.png) + +`ArrayDeque` 在日常使用得不多,值得注意的是它与 `LinkedList` 的对比:`LinkedList` 采用**链表**实现双端队列,而 `ArrayDeque` 使用**数组**实现双端队列。 + +> 在文档中作者写到:**ArrayDeque 作为栈时比 Stack 性能好,作为队列时比 LinkedList 性能好** + +由于双端队列**只能在头部和尾部**操作元素,所以删除元素和插入元素的时间复杂度大部分都稳定在 `O(1)` ,除非在扩容时会涉及到元素的批量复制操作。但是在大多数情况下,使用它时应该指定一个大概的数组长度,避免频繁的扩容。 + + +## 3 PriorityQueue +### 底层原理 +PriorityQueue 基于**优先级堆实现**的优先级队列,而堆是采用**数组**实现: + +![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1595727271522-d144468c-041e-4721-a786-9f952f06fafe.png) + +文档中的描述告诉我们:该数组中的元素通过传入 `Comparator` 进行定制排序,如果不传入`Comparator`时,则按照元素本身`自然排序`,但要求元素实现了`Comparable`接口,所以 PriorityQueue **不允许存储 NULL 元素**。 + +PriorityQueue 应用场景:元素本身具有优先级,需要按照**优先级处理元素** + +- 例如游戏中的VIP玩家与普通玩家,VIP 等级越高的玩家越先安排进入服务器玩耍,减少玩家流失。 + +```Java +public static void main(String[] args) { + Student vip1 = new Student("张三", 1); + Student vip3 = new Student("洪七", 2); + Student vip4 = new Student("老八", 4); + Student vip2 = new Student("李四", 1); + Student normal1 = new Student("王五", 0); + Student normal2 = new Student("赵六", 0); + // 根据玩家的 VIP 等级进行降序排序 + PriorityQueue queue = new PriorityQueue<>((o1, o2) -> o2.getScore().compareTo(o1.getScore())); + queue.add(vip1);queue.add(vip4);queue.add(vip3); + queue.add(normal1);queue.add(normal2);queue.add(vip2); + while (!queue.isEmpty()) { + Student s1 = queue.poll(); + System.out.println(s1.getName() + "进入游戏; " + "VIP等级: " + s1.getScore()); + } +} + public static class Student implements Comparable { + private String name; + private Integer score; + public Student(String name, Integer score) { + this.name = name; + this.score = score; + } + @Override + public int compareTo(Student o) { + return this.score.compareTo(o.getScore()); + } + } +``` + +执行上面的代码可以得到下面这种有趣的结果,可以看到`氪金`使人带来快乐。 + +![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1595727945968-768b45bb-96dc-4850-8759-f07776107a23.png) + +VIP 等级越高(优先级越高)就越优先安排进入游戏(优先处理),类似这种有优先级的场景还有非常多,各位可以发挥自己的想象力。 + +PriorityQueue 总结: + +- PriorityQueue 是基于**优先级堆**实现的优先级队列,而堆是用**数组**维护的 + +- PriorityQueue 适用于**元素按优先级处理**的业务场景,例如用户在请求人工客服需要排队时,根据用户的**VIP等级**进行 `插队` 处理,等级越高,越先安排客服。 + + +### 主要方法 +```java +boolean add(object) :将指定的元素插入此优先级队列。 +boolean offer(object) :将指定的元素插入此优先级队列。 +boolean remove(object) :从此队列中移除指定元素的单个实例(如果存在)。 +Object poll() :检索并删除此队列的头部;如果此队列为空,则返回null。 +Object element() :获取但不删除此队列的头部,如果此队列为空,则抛出NoSuchElementException 。 +Object peek() :检索但不删除此队列的头部;如果此队列为空,则返回null。 +void clear() :从此优先级队列中删除所有元素。 +Comparator comparator() :返回用于对此队列中的元素进行排序的Comparator comparator()如果此队列是根据其元素的自然顺序排序的,则返回null。 +boolean contains(Object o) :如果此队列包含指定的元素,则返回true。 +Iterator iterator() :返回对该队列中的元素进行迭代的迭代器。 +int size() :返回此队列中的元素数。 +Object[] toArray() :返回一个包含此队列中所有元素的数组。 +``` + + +## 4 PriorityBlockingQueue + +### 底层原理 +Java PriorityBlockingQueue类是concurrent阻塞队列数据结构的实现,其中根据对象的priority对其进行处理。 名称的“阻塞”部分已添加,表示线程将阻塞等待,直到队列上有可用的项目为止 。 + +在priority blocking queue ,添加的对象根据其优先级进行排序。 默认情况下,优先级由对象的自然顺序决定。 队列构建时提供的Comparator器可以覆盖默认优先级。 +* PriorityBlockingQueue是一个无界队列,并且会动态增长。 默认初始容量为'11' ,可以在适当的构造函数中使用initialCapacity参数覆盖此初始容量。 +* 它**提供了阻塞检索操作**。 +* 它不允许使用NULL对象。 +* 添加到PriorityBlockingQueue的对象必须具有可比性,否则它将引发ClassCastException 。 +* 默认情况下,优先级队列的对象以自然顺序排序 。 +* 比较器可用于队列中对象的自定义排序。 +* 优先级队列的head是基于自然排序或基于比较器排序的least元素。 当我们轮询队列时,它从队列中返回头对象。 +* 如果存在多个具有相同优先级的对象,则它可以随机轮询其中的任何一个。 +* PriorityBlockingQueue是thread safe 。 + +### 主要方法 + +```java +boolean add(object) :将指定的元素插入此优先级队列。 +boolean offer(object) :将指定的元素插入此优先级队列。 +boolean remove(object) :从此队列中移除指定元素的单个实例(如果存在)。 +Object poll() :检索并删除此队列的头部,并在必要时等待指定的等待时间,以使元素可用。 +Object poll(timeout, timeUnit) :检索并删除此队列的头部,如果有必要,直到指定的等待时间,元素才可用。 +Object take() :检索并删除此队列的头部,如有必要,请等待直到元素可用。 +void put(Object o) :将指定的元素插入此优先级队列。 +void clear() :从此优先级队列中删除所有元素。 +Comparator comparator() :返回用于对此队列中的元素进行排序的Comparator comparator()如果此队列是根据其元素的自然顺序排序的,则返回null。 +boolean contains(Object o) :如果此队列包含指定的元素,则返回true。 +Iterator iterator() :返回对该队列中的元素进行迭代的迭代器。 +int size() :返回此队列中的元素数。 +int drainTo(Collection c) :从此队列中删除所有可用元素,并将它们添加到给定的collection中。 +intrainToTo(Collection c,int maxElements) :从此队列中最多移除给定数量的可用元素,并将它们添加到给定的collection中。 +int remainingCapacity() Integer.MAX_VALUE int remainingCapacity() :总是返回Integer.MAX_VALUE因为PriorityBlockingQueue不受容量限制。 +Object[] toArray() :返回一个包含此队列中所有元素的数组。 +``` +### 实例 +```java +import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.TimeUnit; + +public class PriorityQueueExample +{ + public static void main(String[] args) throws InterruptedException + { + PriorityBlockingQueue priorityBlockingQueue = new PriorityBlockingQueue<>(); + + new Thread(() -> + { + System.out.println("Waiting to poll ..."); + + try + { + while(true) + { + Integer poll = priorityBlockingQueue.take(); + System.out.println("Polled : " + poll); + + Thread.sleep(TimeUnit.SECONDS.toMillis(1)); + } + + } catch (InterruptedException e) { + e.printStackTrace(); + } + + }).start(); + + Thread.sleep(TimeUnit.SECONDS.toMillis(2)); + priorityBlockingQueue.add(1); + + Thread.sleep(TimeUnit.SECONDS.toMillis(2)); + priorityBlockingQueue.add(2); + + Thread.sleep(TimeUnit.SECONDS.toMillis(2)); + priorityBlockingQueue.add(3); + } +} +``` + +## 5 ArrayBlockingQueue + +### 底层原理 + +ArrayBlockingQueue类是由数组支持的Java concurrent和bounded阻塞队列实现。 它对元素FIFO(先进先出)进行排序。 + +ArrayBlockingQueue的head是一直在队列中最长时间的那个元素。 ArrayBlockingQueue的tail是最短时间进入队列的元素。 新元素插入到队列的尾部 ,并且队列检索操作在队列的开头获取元素 。 + +* ArrayBlockingQueue是由数组支持的固定大小的有界队列。 +* 它对元素FIFO(先进先出)进行排序。 +* 元素插入到尾部,并从队列的开头检索。 +* 创建后,队列的容量无法更改。 +* 它提供阻塞的插入和检索操作 。 +* 它不允许使用NULL对象。 +* ArrayBlockingQueue是thread safe 。 +* 方法iterator()提供的Iterator按从第一个(头)到最后一个(尾部)的顺序遍历元素。 +* ArrayBlockingQueue支持可选的fairness policy用于订购等待的生产者线程和使用者线程。 将fairness设置为true ,队列按FIFO顺序授予线程访问权限。 + + + + +### 生产消费者实例 +使用阻塞插入和检索从ArrayBlockingQueue中放入和取出元素的Java示例。 + +* 当队列已满时,生产者线程将等待。 一旦从队列中取出一个元素,它就会将该元素添加到队列中。 +* 如果队列为空,使用者线程将等待。 队列中只有一个元素时,它将取出该元素。 +```java +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.TimeUnit; + +public class ArrayBlockingQueueExample +{ + public static void main(String[] args) throws InterruptedException + { + ArrayBlockingQueue priorityBlockingQueue = new ArrayBlockingQueue<>(5); + + //Producer thread + new Thread(() -> + { + int i = 0; + try + { + while (true) + { + priorityBlockingQueue.put(++i); + System.out.println("Added : " + i); + + Thread.sleep(TimeUnit.SECONDS.toMillis(1)); + } + + } catch (InterruptedException e) { + e.printStackTrace(); + } + + }).start(); + + //Consumer thread + new Thread(() -> + { + try + { + while (true) + { + Integer poll = priorityBlockingQueue.take(); + System.out.println("Polled : " + poll); + + Thread.sleep(TimeUnit.SECONDS.toMillis(2)); + } + + } catch (InterruptedException e) { + e.printStackTrace(); + } + + }).start(); + } +} +``` + +### 主要方法 + +```java +ArrayBlockingQueue(int capacity) :构造具有给定(固定)容量和默认访问策略的空队列。 +ArrayBlockingQueue(int capacity,boolean fair) :构造具有给定(固定)容量和指定访问策略的空队列。 如果公允值为true ,则按FIFO顺序处理在插入或移除时阻塞的线程的队列访问; 如果为false,则未指定访问顺序。 +ArrayBlockingQueue(int capacity,boolean fair,Collection c) :构造一个队列,该队列具有给定(固定)的容量,指定的访问策略,并最初包含给定集合的元素,并以集合迭代器的遍历顺序添加。 +void put(Object o) :将指定的元素插入此队列的尾部,如果队列已满,则等待空间变为可用。 +boolean add(object) : Inserts the specified element at the tail of this queue if it is possible to do so immediately without exceeding the queue’s capacity, returning true upon success and throwing an IllegalStateException if this queue is full. +boolean offer(object) :如果可以在不超出队列容量的情况下立即执行此操作,则在此队列的尾部插入指定的元素,如果成功,则返回true,如果此队列已满,则抛出IllegalStateException。 +boolean remove(object) :从此队列中移除指定元素的单个实例(如果存在)。 +Object peek() :检索但不删除此队列的头部;如果此队列为空,则返回null。 +Object poll() :检索并删除此队列的头部;如果此队列为空,则返回null。 +Object poll(timeout, timeUnit) :检索并删除此队列的头部,如果有必要,直到指定的等待时间,元素才可用。 +Object take() :检索并删除此队列的头部,如有必要,请等待直到元素可用。 +void clear() :从队列中删除所有元素。 +boolean contains(Object o) :如果此队列包含指定的元素,则返回true。 +Iterator iterator() :以适当的顺序返回对该队列中的元素进行迭代的迭代器。 +int size() :返回此队列中的元素数。 +int drainTo(Collection c) :从此队列中删除所有可用元素,并将它们添加到给定的collection中。 +intrainToTo(Collection c,int maxElements) :从此队列中最多移除给定数量的可用元素,并将它们添加到给定的collection中。 +int remainingCapacity() :返回该队列理想情况下(在没有内存或资源限制的情况下)可以接受而不阻塞的其他元素的数量。 +Object[] toArray() :以适当的顺序返回一个包含此队列中所有元素的数组。 +``` + + +## 6 LinkedTransferQueue + +### 底层原理 + +直接消息队列。也就是说,生产者生产后,必须等待消费者来消费才能继续执行。 + +Java TransferQueue是并发阻塞队列的实现,生产者可以在其中等待使用者使用消息。 LinkedTransferQueue类是Java中TransferQueue的实现。 + + +* LinkedTransferQueue是链接节点上的unbounded队列。 +* 此队列针对任何给定的生产者对元素FIFO(先进先出)进行排序。 +* 元素插入到尾部,并从队列的开头检索。 +* 它提供阻塞的插入和检索操作 。 +* 它不允许使用NULL对象。 +* LinkedTransferQueue是thread safe 。 +* 由于异步性质,size()方法不是固定时间操作,因此,如果在遍历期间修改此集合,则可能会报告不正确的结果。 +* 不保证批量操作addAll,removeAll,retainAll,containsAll,equals和toArray是原子执行的。 例如,与addAll操作并发操作的迭代器可能仅查看某些添加的元素。 + + + +### 实例 +非阻塞实例 + +```java +LinkedTransferQueue linkedTransferQueue = new LinkedTransferQueue<>(); + +linkedTransferQueue.put(1); + +System.out.println("Added Message = 1"); + +Integer message = linkedTransferQueue.poll(); + +System.out.println("Recieved Message = " + message); +``` + +阻塞插入实例,用于现成状态同步通信 +使用阻塞插入和检索从LinkedTransferQueue放入和取出元素的Java示例。 + +* 生产者线程将等待,直到有消费者准备从队列中取出项目为止。 +* 如果队列为空,使用者线程将等待。 队列中只有一个元素时,它将取出该元素。 只有在消费者接受了消息之后,生产者才可以再发送一条消息。 + + + + +```java +import java.util.Random; +import java.util.concurrent.LinkedTransferQueue; +import java.util.concurrent.TimeUnit; + +public class LinkedTransferQueueExample +{ + public static void main(String[] args) throws InterruptedException + { + LinkedTransferQueue linkedTransferQueue = new LinkedTransferQueue<>(); + + new Thread(() -> + { + Random random = new Random(1); + try + { + while (true) + { + System.out.println("Producer is waiting to transfer message..."); + + Integer message = random.nextInt(); + boolean added = linkedTransferQueue.tryTransfer(message); + if(added) { + System.out.println("Producer added the message - " + message); + } + Thread.sleep(TimeUnit.SECONDS.toMillis(3)); + } + + } catch (InterruptedException e) { + e.printStackTrace(); + } + + }).start(); + + new Thread(() -> + { + try + { + while (true) + { + System.out.println("Consumer is waiting to take message..."); + + Integer message = linkedTransferQueue.take(); + + System.out.println("Consumer recieved the message - " + message); + + Thread.sleep(TimeUnit.SECONDS.toMillis(3)); + } + + } catch (InterruptedException e) { + e.printStackTrace(); + } + + }).start(); + } +} +``` + + +### 主要方法 + +```java +LinkedTransferQueue() :构造一个初始为空的LinkedTransferQueue。 +LinkedTransferQueue(Collection c) :构造一个LinkedTransferQueue,最初包含给定集合的元素,并以该集合的迭代器的遍历顺序添加。 +Object take() :检索并删除此队列的头部,如有必要,请等待直到元素可用。 +void transfer(Object o) :将元素传输给使用者,如有必要,请等待。 +boolean tryTransfer(Object o) :如果可能,立即将元素传输到等待的使用者。 +boolean tryTransfer(Object o,long timeout,TimeUnit unit) :如果有可能,则在超时之前将元素传输给使用者。 +int getWaitingConsumerCount() :返回等待通过BlockingQueue.take()或定时轮询接收元素的使用者数量的估计值。 +boolean hasWaitingConsumer() :如果至少有一个使用者正在等待通过BlockingQueue.take()或定时轮询接收元素,则返回true。 +void put(Object o) :将指定的元素插入此队列的尾部。 +boolean add(object) : Inserts the specified element at the tail of this queue. +boolean offer(object) :将指定的元素插入此队列的尾部。 +boolean remove(object) :从此队列中移除指定元素的单个实例(如果存在)。 +Object peek() :检索但不删除此队列的头部;如果此队列为空,则返回null。 +Object poll() :检索并删除此队列的头部;如果此队列为空,则返回null。 +Object poll(timeout, timeUnit) :检索并删除此队列的头部,如果有必要,直到指定的等待时间,元素才可用。 +void clear() :从队列中删除所有元素。 +boolean contains(Object o) :如果此队列包含指定的元素,则返回true。 +Iterator iterator() :以适当的顺序返回对该队列中的元素进行迭代的迭代器。 +int size() :返回此队列中的元素数。 +int drainTo(Collection c) :从此队列中删除所有可用元素,并将它们添加到给定的collection中。 +intrainToTo(Collection c,int maxElements) :从此队列中最多移除给定数量的可用元素,并将它们添加到给定的collection中。 +int remainingCapacity() :返回该队列理想情况下(在没有内存或资源限制的情况下)可以接受而不阻塞的其他元素的数量。 +Object[] toArray() :以适当的顺序返回一个包含此队列中所有元素的数组。 +``` + diff --git a/Java基础教程/Java集合类/05 Set.md b/Java基础教程/Java集合类/05 Set.md new file mode 100644 index 00000000..412b9781 --- /dev/null +++ b/Java基础教程/Java集合类/05 Set.md @@ -0,0 +1,344 @@ +## 0 Set 接口 + +### Set接口 +`Set`接口继承了`Collection`接口,是一个不包括重复元素的集合,更确切地说,Set 中任意两个元素不会出现 `o1.equals(o2)`,而且 Set **至多**只能存储一个 `NULL` 值元素,Set 集合的组成部分可以用下面这张图概括: + +![1595682050240-6c6946f2-9dd4-4e5b-a006-39144184e2f1.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1596107343106-b98a8b29-06ba-4f6f-ab14-7a139e506dd5.png) + +在 Set 集合体系中,我们需要着重关注两点: + +- 存入**可变元素**时,必须非常小心,因为任意时候元素状态的改变都有可能使得 Set 内部出现两个**相等**的元素,即 `o1.equals(o2) = true`,所以一般不要更改存入 Set 中的元素,否则将会破坏了 `equals()` 的作用! + +- Set 的最大作用就是判重,在项目中最大的作用也是**判重**! + +接下来我们去看它的实现类和子类: `AbstractSet` 和 `SortedSet` + +### AbstractSet 抽象类 + +`AbstractSet` 是一个实现 Set 的一个抽象类,定义在这里可以将所有具体 Set 集合的**相同行为**在这里实现,**避免子类包含大量的重复代码** + +所有的 Set 也应该要有相同的 `hashCode()` 和 `equals()` 方法,所以使用抽象类把该方法重写后,子类无需关心这两个方法。 + +```Java +public abstract class AbstractSet implements Set { + // 判断两个 set 是否相等 + public boolean equals(Object o) { + if (o == this) { // 集合本身 + return true; + } else if (!(o instanceof Set)) { // 集合不是 set + return false; + } else { + // 比较两个集合的元素是否全部相同 + } + } + // 计算所有元素的 hashcode 总和 + public int hashCode() { + int h = 0; + Iterator i = this.iterator(); + while(i.hasNext()) { + E obj = i.next(); + if (obj != null) { + h += obj.hashCode(); + } + } + return h; + } +} +``` + +### SortedSet 接口 + +`SortedSet` 是一个接口,它在 Set 的基础上扩展了**排序**的行为,所以所有实现它的子类都会拥有排序功能。 + +```Java +public interface SortedSet extends Set { + // 元素的比较器,决定元素的排列顺序 + Comparator comparator(); + // 获取 [var1, var2] 之间的 set + SortedSet subSet(E var1, E var2); + // 获取以 var1 开头的 Set + SortedSet headSet(E var1); + // 获取以 var1 结尾的 Set + SortedSet tailSet(E var1); + // 获取首个元素 + E first(); + // 获取最后一个元素 + E last(); +} +``` + +## 1 HashSet + +### 底层实现 + +HashSet 底层借助 `HashMap` 实现,我们可以观察它的多个构造方法,本质上都是 new 一个 HashMap + + +```Java +public class HashSet extends AbstractSet implements Set, Cloneable, Serializable { + public HashSet() { + this.map = new HashMap(); + } + public HashSet(int initialCapacity, float loadFactor) { + this.map = new HashMap(initialCapacity, loadFactor); + } + public HashSet(int initialCapacity) { + this.map = new HashMap(initialCapacity); + } +} +``` + +我们可以观察 `add()` 方法和`remove()`方法是如何将 HashSet 的操作嫁接到 HashMap 的。 + +```Java +private static final Object PRESENT = new Object(); + +public boolean add(E e) { + return this.map.put(e, PRESENT) == null; +} +public boolean remove(Object o) { + return this.map.remove(o) == PRESENT; +} +``` + +我们看到 `PRESENT` 就是一个**静态常量**:使用 PRESENT 作为 HashMap 的 value 值,使用HashSet的开发者只需**关注**于需要插入的 `key`,**屏蔽**了 HashMap 的 `value` + +![](image/2022-12-15-19-08-34.png) + +上图可以观察到每个`Entry`的`value`都是 PRESENT 空对象,我们就不用再理会它了。 + +HashSet 在 HashMap 基础上实现,所以很多地方可以联系到 HashMap: + +- 底层数据结构:HashSet 也是采用`数组 + 链表 + 红黑树`实现 +- 线程安全性:由于采用 HashMap 实现,而 HashMap 本身线程不安全,在HashSet 中没有添加额外的同步策略,所以 HashSet 也**线程不安全** +- 存入 HashSet 的对象的状态**最好不要发生变化**,因为有可能改变状态后,在集合内部出现两个元素`o1.equals(o2)`,破坏了 `equals()`的语义。 + + +### 继承结构 + +* 实现了Set接口。 +* HashSet中不允许重复的值。 +* HashSet中允许一个NULL元素。 +* 无序集合,并且不保证集合的迭代顺序。 +* 为基本操作(添加,删除,包含和调整大小)提供恒定的时间性能。 +* HashSet不同步。 如果多个线程同时访问哈希集,并且至少有一个线程修改了哈希集,则必须在外部对其进行同步。使用Collections.synchronizedSet(new HashSet())方法获取同步的哈希集。 + + +![](image/2022-12-15-19-08-19.png) + +### 基本使用 + +* 默认初始容量为16 。 我们可以通过在构造函数HashSet(int initialCapacity)传递默认容量来覆盖此默认容量。 + + + +```java +public boolean add(E e) :如果指定的元素不存在,则将其添加到Set中。 此方法在内部使用equals()方法检查重复项。 如果元素重复,则元素被拒绝,并且不替换值。 +public void clear() :从哈希集中删除所有元素。 +public boolean contains(Object o) :如果哈希集包含指定的元素othrweise false ,则返回false 。 +public boolean isEmpty() :如果哈希集不包含任何元素,则返回true ,否则返回false 。 +public int size() :返回哈希集中的元素数量。 +public Iterator iterator() :返回对此哈希集中的元素的迭代器。 从迭代器返回的元素没有特定的顺序。 +public boolean remove(Object o) :从哈希集中删除指定的元素(如果存在)并返回true ,否则返回false 。 +public boolean removeAll(Collection <?> c) :删除哈希集中属于指定集合的​​所有元素。 +public Object clone() :返回哈希集的浅表副本。 +public Spliterator spliterator() :在此哈希集中的元素上创建后绑定和故障快速的Spliterator。 +``` + +## 2 LinkedHashSet + +### 底层原理 +LinkedHashSet 的代码少的可怜,不信我给你我粘出来 + +![](image/2022-12-15-19-16-20.png) + +少归少,还是不能闹,`LinkedHashSet`继承了`HashSet`,我们跟随到父类 HashSet 的构造方法看看 + +```java +HashSet(int initialCapacity, float loadFactor, boolean dummy) { + this.map = new LinkedHashMap(initialCapacity, loadFactor); +} +``` + +发现父类中 map 的实现采用`LinkedHashMap`,这里注意不是`HashMap`,而 LinkedHashMap 底层又采用 HashMap + 双向链表 实现的,所以本质上 LinkedHashSet 还是使用 HashMap 实现的。 + +> LinkedHashSet -> LinkedHashMap -> HashMap + 双向链表 + +![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1596110006108-d064aa74-d71c-401a-94b9-83caef7cdbc7.png) + +而 LinkedHashMap 是采用 `HashMap`和`双向链表`实现的,这条双向链表中保存了元素的插入顺序。所以 LinkedHashSet 可以按照元素的插入顺序遍历元素,如果你熟悉`LinkedHashMap`,那 LinkedHashSet 也就更不在话下了。 + +关于 LinkedHashSet 需要注意几个地方: + +- 它继承了 `HashSet`,而 HashSet 默认是采用 HashMap 存储数据的,但是 LinkedHashSet 调用父类构造方法初始化 map 时是 LinkedHashMap 而不是 HashMap,这个要额外注意一下 +- 由于 LinkedHashMap 不是线程安全的,且在 LinkedHashSet 中没有添加额外的同步策略,所以 LinkedHashSet 集合**也不是线程安全**的 + +### 继承关系 + +![](image/2022-12-15-19-17-09.png) + +* 它扩展了HashSet类,后者扩展了AbstractSet类。 +* 它实现Set接口。 +* LinkedHashSet中不允许重复的值 。 +* LinkedHashSet中允许一个NULL元素。 +* 它是一个ordered collection ,它是元素插入到集合中insertion-order ( insertion-order )。 +* 像HashSet一样,此类为基本操作(添加,删除,包含和调整大小)提供constant time performance 。 +* LinkedHashSet not synchronized 。 如果多个线程同时访问哈希集,并且至少有一个线程修改了哈希集,则必须在外部对其进行同步。 +* 使用Collections.synchronizedSet(new LinkedHashSet())方法来获取同步的LinkedHashSet。 + + +### 使用方法 + +```java +public boolean add(E e) :如果指定的元素不存在,则将其添加到Set中。 此方法在内部使用equals()方法检查重复项。 如果元素重复,则元素被拒绝,并且不替换值。 +public void clear() :从LinkedHashSet中删除所有元素。 +public boolean contains(Object o) :如果LinkedHashSet包含指定的元素othrweise false ,则返回false 。 +public boolean isEmpty() :如果LinkedHashSet不包含任何元素,则返回true ,否则返回false 。 +public int size() :返回LinkedHashSet中的元素数。 +public Iterator iterator() :返回对此LinkedHashSet中的元素的迭代器。 从迭代器返回的元素没有特定的顺序。 +public boolean remove(Object o) :从LinkedHashSet中移除指定的元素(如果存在)并返回true ,否则返回false 。 +public boolean removeAll(Collection <?> c) :删除LinkedHashSet中属于指定集合的​​所有元素。 +public Object clone() :返回LinkedHashSet的浅表副本。 +public Spliterator spliterator() :在此LinkedHashSet中的元素上创建后绑定和故障快速的Spliterator。 它具有以下初始化属性Spliterator.DISTINCT , Spliterator.ORDERED 。 +``` +## 3 TreeSet + +### 底层原理 +TreeSet 是基于 TreeMap 的实现,所以存储的元素是**有序**的,底层的数据结构是`数组 + 红黑树`。 + +![img](https://cdn.nlark.com/yuque/0/2020/png/1694029/1596126807774-1a122d9e-4210-4708-8328-c23f65bc55dd.png) + +而元素的排列顺序有`2`种,和 TreeMap 相同:自然排序和定制排序,常用的构造方法已经在下面展示出来了,TreeSet 默认按照自然排序,如果需要定制排序,需要传入`Comparator`。 + +```Java +public TreeSet() { + this(new TreeMap()); +} +public TreeSet(Comparator comparator) { + this(new TreeMap<>(comparator)); +} +``` + +TreeSet 应用场景有很多,像在游戏里的玩家战斗力排行榜 + +```Java +public class Player implements Comparable { + public String name; + public int score; + @Override + public int compareTo(Student o) { + return Integer.compareTo(this.score, o.score); + } +} +public static void main(String[] args) { + Player s1 = new Player("张三", 100); + Player s2 = new Player("李四", 90); + Player s3 = new Player("王五", 80); + TreeSet set = new TreeSet(); + set.add(s2); set.add(s1); set.add(s3); + System.out.println(set); +} +// [Student{name='王五', score=80}, Student{name='李四', score=90}, Student{name='张三', score=100}] +``` + +对 TreeSet 介绍了它的主要实现方式和应用场景,有几个值得注意的点。 + +- TreeSet 的所有操作都会转换为对 TreeMap 的操作,TreeMap 采用**红黑树**实现,任意操作的平均时间复杂度为 `O(logN)` +- TreeSet 是一个**线程不安全**的集合 +- TreeSet 常应用于对**不重复**的元素**定制排序**,例如玩家战力排行榜 + +> 注意:TreeSet判断元素是否重复的方法是判断compareTo()方法是否返回0,而不是调用 hashcode() 和 equals() 方法,如果返回 0 则认为集合内已经存在相同的元素,不会再加入到集合当中。 + +### 继承关系 + +![](image/2022-12-15-19-28-47.png) + +* 它扩展了AbstractSet类,该类扩展了AbstractCollection类。 +* 它实现了NavigableSet接口,该接口扩展了SortedSet接口。 +* TreeSet中不允许重复的值。 +* 在TreeSet中不允许NULL。 +* 它是一个ordered collection ,按排序顺序存储元素。 +* 与HashSet一样,此类为基本操作(添加,删除,包含和调整大小)提供恒定的时间性能。 +* TreeSet不允许插入异构对象,因为它必须比较对象以确定排序顺序。 +* TreeSet不synchronized 。 如果多个线程同时访问哈希集,并且至少有一个线程修改了哈希集,则必须在外部对其进行同步。 +* 使用Collections.synchronizedSortedSet(new TreeSet())方法获取同步的TreeSet。 + + + +### 使用方法 +```java +boolean add(E e) :将指定的元素添加到Set中(如果尚不存在)。 +Comparator comparator() :返回用于对该集合中的元素进行排序的Comparator comparator()如果此集合使用其元素的自然排序,则返回null。 +Object first() :返回当前在此集合中的第一个(最低)元素。 +Object last() :返回当前在此集合中的最后一个(最大)元素。 +void clear() :从TreeSet中删除所有元素。 +boolean contains(Object o) :如果TreeSet包含指定的元素,则返回true否则返回false 。 +boolean isEmpty() :如果TreeSet不包含任何元素,则返回true ,否则返回false 。 +int size() :返回TreeSet中的元素数。 +Iterator iterator() :以ascending order返回此集合中元素的迭代器。 +Iterator descendingIterator() :以Iterator descendingIterator()返回此集合中元素的迭代器。 +NavigableSet descendingSet() :返回此集合中包含的元素的逆序视图。 +boolean remove(Object o) :从TreeSet中移除指定的元素(如果存在)并返回true ,否则返回false 。 +Object clone() :返回TreeSet的浅表副本。 +Spliterator spliterator() :在此TreeSet中的元素上创建后绑定和故障快速的Spliterator。 它与树集提供的顺序相同。 +``` + + + +## 4 CopyOnWriteArraySet + +### 底层原理 +HashSet的thread-safe变体,它对所有操作都使用基础CopyOnWriteArrayList + +与CopyOnWriteArrayList相似,它的immutable snapshot样式iterator方法在创建iterator使用对数组状态(在后备列表内)的引用。 这在遍历操作远远超过集合更新操作且我们不想同步遍历并且在更新集合时仍希望线程安全的用例中很有用。 + +* 作为正常设置的数据结构,它不允许重复。 +* CopyOnWriteArraySet类实现Serializable接口并扩展AbstractSet类。 +* 使用CopyOnWriteArraySet进行更新操作成本很高,因为每个突变都会创建基础数组的克隆副本并向其添加/更新元素。 +* 它是HashSet的线程安全版本。 每个访问该集合的线程在初始化此集合的迭代器时都会看到自己创建的后备阵列快照版本。 +* 因为它在创建迭代器时获取基础数组的快照,所以它不会抛出ConcurrentModificationException 。不支持迭代器上的变异操作。 这些方法抛出UnsupportedOperationException 。 +* CopyOnWriteArraySet是synchronized Set的并发替代,当迭代的次数超过突变次数时,CopyOnWriteArraySet提供更好的并发性。 +* 它允许重复的元素和异构对象(使用泛型来获取编译时错误)。 +* 由于每次创建迭代器时都会创建基础数组的新副本,因此performance is slower HashSet + +### 主要方法 + +```java +CopyOnWriteArraySet() :创建一个空集。 +CopyOnWriteArraySet(Collection c) :创建一个包含指定集合元素的集合,其顺序由集合的迭代器返回。 +boolean add(object o) :将指定的元素添加到此集合(如果尚不存在)。 +boolean addAll(collection c) :将指定集合中的所有元素(如果尚不存在boolean addAll(collection c)添加到此集合中。 +void clear() :从此集合中删除所有元素。 +boolean contains(Object o) :如果此集合包含指定的元素,则返回true。 +boolean isEmpty() :如果此集合不包含任何元素,则返回true。 +Iterator iterator() :以添加这些元素的顺序在此集合中包含的元素上返回一个迭代器。 +boolean remove(Object o) :从指定的集合中删除指定的元素(如果存在)。 +int size() :返回此集合中的元素数 +``` + + +### 实例 + +```java +CopyOnWriteArraySet set = new CopyOnWriteArraySet<>(Arrays.asList(1,2,3)); + +System.out.println(set); //[1, 2, 3] + +//Get iterator 1 +Iterator itr1 = set.iterator(); + +//Add one element and verify set is updated +set.add(4); +System.out.println(set); //[1, 2, 3, 4] + +//Get iterator 2 +Iterator itr2 = set.iterator(); + +System.out.println("====Verify Iterator 1 content===="); + +itr1.forEachRemaining(System.out :: println); //1,2,3 + +System.out.println("====Verify Iterator 2 content===="); + +itr2.forEachRemaining(System.out :: println); //1,2,3,4 +``` \ No newline at end of file diff --git a/Java基础教程/Java集合类/06 Map.md b/Java基础教程/Java集合类/06 Map.md new file mode 100644 index 00000000..9db60c09 --- /dev/null +++ b/Java基础教程/Java集合类/06 Map.md @@ -0,0 +1,425 @@ + +## 0 Map 集合体系详解 + +`Map`接口是由``组成的集合,由`key`映射到**唯一**的`value`,所以`Map`不能包含重复的`key`,每个键**至多**映射一个值。下图是整个 Map 集合体系的主要组成部分,我将会按照日常使用频率从高到低一一讲解。 + +不得不提的是 Map 的设计理念:**定位元素**的时间复杂度优化到 `O(1)` + +Map 体系下主要分为 AbstractMap 和 SortedMap两类集合 + +`AbstractMap`是对 Map 接口的扩展,它定义了普通的 Map 集合具有的**通用行为**,可以避免子类重复编写大量相同的代码,子类继承 AbstractMap 后可以重写它的方法,**实现额外的逻辑**,对外提供更多的功能。 + +`SortedMap` 定义了该类 Map 具有 `排序`行为,同时它在内部定义好有关排序的抽象方法,当子类实现它时,必须重写所有方法,对外提供排序功能。 + +![](image/2022-12-15-19-35-52.png) + +## 1 HashMap + +### 底层原理 +HashMap 是一个**最通用的**利用哈希表存储元素的集合,将元素放入 HashMap 时,将`key`的哈希值转换为数组的`索引`下标**确定存放位置**,查找时,根据`key`的哈希地址转换成数组的`索引`下标**确定查找位置**。 + +HashMap 底层是用数组 + 链表 + 红黑树这三种数据结构实现,它是**非线程安全**的集合。 + +![](image/2022-12-15-19-38-24.png) + +发送哈希冲突时,HashMap 的解决方法是将相同映射地址的元素连成一条`链表`,如果链表的长度大于`8`时,且数组的长度大于`64`则会转换成`红黑树`数据结构。 + +关于 HashMap 的简要总结: + +1. 它是集合中最常用的`Map`集合类型,底层由`数组 + 链表 + 红黑树`组成 +2. HashMap不是线程安全的 +3. 插入元素时,通过计算元素的`哈希值`,通过**哈希映射函数**转换为`数组下标`;查找元素时,同样通过哈希映射函数得到数组下标`定位元素的位置` + +### 继承关系 + +![](image/2022-12-15-19-39-03.png) + +* HashMap不能包含重复的键。 +* HashMap允许多个null值,但只允许一个null键。 +* HashMap是一个unordered collection 。 它不保证元素的任何特定顺序。 +* HashMap not thread-safe 。 您必须显式同步对HashMap的并发修改。 或者,您可以使用Collections.synchronizedMap(hashMap)来获取HashMap的同步版本。 +* 只能使用关联的键来检索值。 +* HashMap仅存储对象引用。 因此,必须将原语与其对应的包装器类一起使用。 如int将存储为Integer 。 + + +### 主要方法 + +```java +void clear() :从HashMap中删除所有键-值对。 +Object clone() :返回指定HashMap的浅表副本。 +boolean containsKey(Object key) :根据是否在地图中找到指定的键,返回true或false 。 +boolean containsValue(Object Value) :类似于containsKey()方法,它查找指定的值而不是键。 +Object get(Object key) :返回HashMap中指定键的值。 +boolean isEmpty() :检查地图是否为空。 +Set keySet() :返回存储在HashMap中的所有密钥的Set 。 +Object put(Key k,Value v) :将键值对插入HashMap中。 +int size() :返回地图的大小,该大小等于存储在HashMap中的键值对的数量。 +Collection values() :返回地图中所有值的集合。 +Value remove(Object key) :删除指定键的键值对。 +void putAll(Map m) :将地图的所有元素复制到另一个指定的地图。 +``` + + + +合并两个hashmap +* 使用HashMap.putAll(HashMap)方法,即可将所有映射从第二张地图复制到第一张地图。hashmap不允许重复的键 。 因此,当我们以这种方式合并map时,对于map1的重复键,其值会被map2相同键的值覆盖。 + +```java +//map 1 +HashMap map1 = new HashMap<>(); + +map1.put(1, "A"); +map1.put(2, "B"); +map1.put(3, "C"); +map1.put(5, "E"); + +//map 2 +HashMap map2 = new HashMap<>(); + +map2.put(1, "G"); //It will replace the value 'A' +map2.put(2, "B"); +map2.put(3, "C"); +map2.put(4, "D"); //A new pair to be added + +//Merge maps +map1.putAll(map2); + +System.out.println(map1); +``` +* merge()函数如果我们要处理在地图中存在重复键的情况,并且我们不想丢失任何地图和任何键的数据。HashMap.merge()函数3个参数。 键,值,并使用用户提供的BiFunction合并重复键的值。跟put一样,实现了重复key的处理。 + +```java +Merge HashMaps Example +//map 1 +HashMap map1 = new HashMap<>(); + +map1.put(1, "A"); +map1.put(2, "B"); +map1.put(3, "C"); +map1.put(5, "E"); + +//map 2 +HashMap map2 = new HashMap<>(); + +map2.put(1, "G"); //It will replace the value 'A' +map2.put(2, "B"); +map2.put(3, "C"); +map2.put(4, "D"); //A new pair to be added + +//Merge maps +map2.forEach( + (key, value) -> map1.merge( key, value, (v1, v2) -> v1.equalsIgnoreCase(v2) ? v1 : v1 + "," + v2) +); + +System.out.println(map1); +``` + +### 遍历方法 + +通过不同的set遍历呗。包括EntrySet遍历、keyset遍历 + +```java +1)在每个循环中使用enrtySet() +for (Map.Entry entry : testMap.entrySet()) { + entry.getKey(); + entry.getValue(); +} +2)在每个循环中使用keySet() +for (String key : testMap.keySet()) { + testMap.get(key); +} +3)使用enrtySet()和迭代器 +Iterator> itr1 = testMap.entrySet().iterator(); +while(itr1.hasNext()) +{ + Map.Entry entry = itr1.next(); + entry.getKey(); + entry.getValue(); +} +4)使用keySet()和迭代器 +Iterator itr2 = testMap.keySet().iterator(); +while(itr2.hasNext()) +{ + String key = itr2.next(); + testMap.get(key); +} +``` + +## 2 LinkedHashMap + +### 底层原理 + +LinkedHashMap 可以看作是 `HashMap` 和 `LinkedList` 的结合:它在 HashMap 的基础上添加了一条双向链表,`默认`存储各个元素的插入顺序,但由于这条双向链表,使得 LinkedHashMap 可以实现 `LRU`缓存淘汰策略,因为我们可以设置这条双向链表按照`元素的访问次序`进行排序 + +![](image/2022-12-15-21-12-52.png) + +LinkedHashMap 是 HashMap 的子类,所以它具备 HashMap 的所有特点,其次,它在 HashMap 的基础上维护了一条`双向链表`,该链表存储了**所有元素**,`默认`元素的顺序与插入顺序**一致**。若`accessOrder`属性为`true`,则遍历顺序按元素的访问次序进行排序。 + +```java +// 头节点 +transient LinkedHashMap.Entry head; +// 尾结点 +transient LinkedHashMap.Entry tail; +``` + +利用 LinkedHashMap 可以实现 `LRU` 缓存淘汰策略,因为它提供了一个方法: + +```java +protected boolean removeEldestEntry(java.util.Map.Entry eldest) { + return false; +} +``` + +该方法可以移除`最靠近链表头部`的一个节点,而在`get()`方法中可以看到下面这段代码,其作用是挪动结点的位置: + +```java +if (this.accessOrder) { + this.afterNodeAccess(e); +} +``` + +只要调用了`get()`且`accessOrder = true`,则会将该节点更新到链表`尾部`,具体的逻辑在`afterNodeAccess()`中,感兴趣的可翻看源码,篇幅原因这里不再展开。 + +现在如果要实现一个`LRU`缓存策略,则需要做两件事情: + +- 指定`accessOrder = true`可以设定链表按照访问顺序排列,通过提供的构造器可以设定`accessOrder` + +```java +public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) { + super(initialCapacity, loadFactor); + this.accessOrder = accessOrder; +} +``` + +- 重写`removeEldestEntry()`方法,内部定义逻辑,通常是判断`容量`是否达到上限,若是则执行淘汰。 + +这里就要贴出一道大厂面试必考题目:[146. LRU缓存机制](https://leetcode-cn.com/problems/lru-cache/),只要跟着我的步骤,就能顺利完成这道大厂题了。 + +关于 LinkedHashMap 主要介绍两点: + +1. 它底层维护了一条`双向链表`,因为继承了 HashMap,所以它也不是线程安全的 +2. LinkedHashMap 可实现`LRU`缓存淘汰策略,其原理是通过设置`accessOrder`为`true`并重写`removeEldestEntry`方法定义淘汰元素时需满足的条件 + +## 3 TreeMap + +### 底层原理 +TreeMap 是 `SortedMap` 的子类,所以它具有**排序**功能。它是基于`红黑树`数据结构实现的,每一个键值对``都是一个结点,默认情况下按照`key`自然排序,另一种是可以通过传入定制的`Comparator`进行自定义规则排序。 + +```java +// 按照 key 自然排序,Integer 的自然排序是升序 +TreeMap naturalSort = new TreeMap<>(); +// 定制排序,按照 key 降序排序 +TreeMap customSort = new TreeMap<>((o1, o2) -> Integer.compare(o2, o1)); +``` + +TreeMap 底层使用了数组+红黑树实现,所以里面的存储结构可以理解成下面这幅图哦。 + +![image-20200730180101883.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1596103385086-d684f26e-dabd-44b7-bab8-151af172496a.png) + +图中红黑树的每一个节点都是一个`Entry`,在这里为了图片的简洁性,就不标明 key 和 value 了,注意这些元素都是已经按照`key`排好序了,整个数据结构都是保持着`有序` 的状态! + +关于`自然`排序与`定制`排序: + +- 自然排序:要求`key`必须实现`Comparable`接口。 + +由于`Integer`类实现了 Comparable 接口,按照自然排序规则是按照`key`从小到大排序。 + +```java +TreeMap treeMap = new TreeMap<>(); +treeMap.put(2, "TWO"); +treeMap.put(1, "ONE"); +System.out.print(treeMap); +// {1=ONE, 2=TWO} +``` + +- 定制排序:在初始化 TreeMap 时传入新的`Comparator`,**不**要求`key`实现 Comparable 接口 + +```java +TreeMap treeMap = new TreeMap<>((o1, o2) -> Integer.compare(o2, o1)); +treeMap.put(1, "ONE"); +treeMap.put(2, "TWO"); +treeMap.put(4, "FOUR"); +treeMap.put(3, "THREE"); +System.out.println(treeMap); +// {4=FOUR, 3=THREE, 2=TWO, 1=ONE} +``` + +通过传入新的`Comparator`比较器,可以覆盖默认的排序规则,上面的代码按照`key`降序排序,在实际应用中还可以按照其它规则自定义排序。 + +`compare()`方法的返回值有三种,分别是:`0`,`-1`,`+1` + +(1)如果返回`0`,代表两个元素相等,不需要调换顺序 + +(2)如果返回`+1`,代表前面的元素需要与后面的元素调换位置 + +(3)如果返回`-1`,代表前面的元素不需要与后面的元素调换位置 + +而何时返回`+1`和`-1`,则由我们自己去定义,JDK默认是按照**自然排序**,而我们可以根据`key`的不同去定义降序还是升序排序。 + +关于 TreeMap 主要介绍了两点: + +1. 它底层是由`红黑树`这种数据结构实现的,所以操作的时间复杂度恒为`O(logN)` +2. TreeMap 可以对`key`进行自然排序或者自定义排序,自定义排序时需要传入`Comparator`,而自然排序要求`key`实现了`Comparable`接口 +3. TreeMap 不是线程安全的。它不synchronized 。 使用Collections.synchronizedSortedMap(new TreeMap())在并发环境中工作。 +4. 它不能具有null键,但可以具有多个null值。 +5. 它以排序顺序(自然顺序)或地图创建时提供的Comparator来存储键。 +6. 它为containsKey , get , put和remove操作提供了保证的log(n)时间成本。 + +### 主要方法 + +```java +void clear():从地图中删除所有键/值对。 +void size():返回此映射中存在的键值对的数量。 +void isEmpty():如果此映射不包含键值映射,则返回true。 +boolean containsKey(Object key):如果地图中存在指定的键,则返回'true' 。 +boolean containsValue(Object key):如果将指定值映射到映射中的至少一个键,则返回'true' 。 +Object get(Object key):检索由指定key映射的值;如果此映射不包含key映射关系,则返回null。 +Object remove(Object key):如果存在,则从映射中删除指定键的键值对。 +Comparator comparator():它返回用于对该映射中的键进行排序的比较器;如果此映射使用其键的自然排序,则返回null。 +Object firstKey():返回树图中当前的第一个(最小)键。 +Object lastKey():返回树图中当前的最后一个(最大)键。 +Object ceilingKey(Object key):返回大于或等于给定键的最小键;如果没有这样的键,则返回null。 +Object higherKey(Object key):返回严格大于指定键的最小键。 +NavigableMap descendingMap():它返回此地图中包含的映射的reverse order view 。 +``` + +## 4 WeakHashMap + +WeakHashMap 日常开发中比较少见,它是基于普通的`Map`实现的,而里面`Entry`中的键在每一次的`垃圾回收`都会被清除掉,所以非常适合用于**短暂访问、仅访问一次**的元素,缓存在`WeakHashMap`中,并尽早地把它回收掉。 + +当`Entry`被`GC`时,WeakHashMap 是如何感知到某个元素被回收的呢? + +在 WeakHashMap 内部维护了一个引用队列`queue` + +```java +private final ReferenceQueue queue = new ReferenceQueue<>(); +``` + +这个 queue 里包含了所有被`GC`掉的键,当JVM开启`GC`后,如果回收掉 WeakHashMap 中的 key,会将 key 放入queue 中,在`expungeStaleEntries()`中遍历 queue,把 queue 中的所有`key`拿出来,并在 WeakHashMap 中删除掉,以达到**同步**。 + +```java +private void expungeStaleEntries() { + for (Object x; (x = queue.poll()) != null; ) { + synchronized (queue) { + // 去 WeakHashMap 中删除该键值对 + } + } +} +``` + +再者,需要注意 WeakHashMap 底层存储的元素的数据结构是`数组 + 链表`,**没有红黑树**哦,可以换一个角度想,如果还有红黑树,那干脆直接继承 HashMap ,然后再扩展就完事了嘛,然而它并没有这样做: + +```java +public class WeakHashMap extends AbstractMap implements Map { + +} +``` + +所以,WeakHashMap 的数据结构图我也为你准备好啦。 + +![image.png](https://cdn.nlark.com/yuque/0/2020/png/1694029/1596106079292-a74fb47e-bb54-47e2-81ac-1254428e73b7.png) + +图中被虚线标识的元素将会在下一次访问 WeakHashMap 时被删除掉,WeakHashMap 内部会做好一系列的调整工作,所以记住队列的作用就是标志那些已经被`GC`回收掉的元素。 + +关于 WeakHashMap 需要注意两点: + +1. 它的键是一种**弱键**,放入 WeakHashMap 时,随时会被回收掉,所以不能确保某次访问元素一定存在 +2. 它依赖普通的`Map`进行实现,是一个非线程安全的集合 +3. WeakHashMap 通常作为**缓存**使用,适合存储那些**只需访问一次**、或**只需保存短暂时间**的键值对 + +## 5 Hashtable +### 底层原理 +Hashtable 底层的存储结构是`数组 + 链表`,而它是一个**线程安全**的集合,但是因为这个线程安全,它就被淘汰掉了。 + +下面是Hashtable存储元素时的数据结构图,它只会存在数组+链表,当链表过长时,查询的效率过低,而且会长时间**锁住** Hashtable。 + +![](image/2022-12-15-20-19-36.png) + +> 本质上就是 WeakHashMap 的底层存储结构了。你千万别问为什么 WeakHashMap 不继承 Hashtable 哦,Hashtable 的`性能`在并发环境下非常差,在非并发环境下可以用`HashMap`更优。 + +HashTable 本质上是 HashMap 的前辈,它被淘汰的原因也主要因为两个字:**性能** + +HashTable 是一个 **线程安全** 的 Map,它所有的方法都被加上了 **synchronized** 关键字,也是因为这个关键字,它注定成为了时代的弃儿。 + +HashTable 底层采用 **数组+链表** 存储键值对,由于被弃用,后人也没有对它进行任何改进 + +HashTable 默认长度为 `11`,负载因子为 `0.75F`,即元素个数达到数组长度的 75% 时,会进行一次扩容,每次扩容为原来数组长度的 `2` 倍 + +HashTable 所有的操作都是线程安全的。 + +### 方法 +跟hashtable一样 + +## 6 ConcurrentHashMap + +### 底层原理 +oncurrentHashMap通过设计支持并发访问其键值对。 + + + +### 使用方法 + +创建和读写 +```java +import java.util.Iterator; +import java.util.concurrent.ConcurrentHashMap; + +public class HashMapExample +{ + public static void main(String[] args) throws CloneNotSupportedException + { + ConcurrentHashMap concurrHashMap = new ConcurrentHashMap<>(); + + //Put require no synchronization + concurrHashMap.put(1, "A"); + concurrHashMap.put(2, "B"); + + //Get require no synchronization + concurrHashMap.get(1); + + Iterator itr = concurrHashMap.keySet().iterator(); + + //Using synchronized block is advisable + synchronized (concurrHashMap) + { + while(itr.hasNext()) { + System.out.println(concurrHashMap.get(itr.next())); + } + } + } +} +``` + +使用Collection.synchronizedMap也有同样的方法 + +```java +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class HashMapExample +{ + public static void main(String[] args) throws CloneNotSupportedException + { + Map syncHashMap = Collections.synchronizedMap(new HashMap<>()); + + //Put require no synchronization + syncHashMap.put(1, "A"); + syncHashMap.put(2, "B"); + + //Get require no synchronization + syncHashMap.get(1); + + Iterator itr = syncHashMap.keySet().iterator(); + + //Using synchronized block is advisable + synchronized (syncHashMap) + { + while(itr.hasNext()) { + System.out.println(syncHashMap.get(itr.next())); + } + } + } +} +``` \ No newline at end of file diff --git a/Java基础教程/Java集合类/07 Iterable&Ieterator.md b/Java基础教程/Java集合类/07 Iterable&Ieterator.md new file mode 100644 index 00000000..f63e74a8 --- /dev/null +++ b/Java基础教程/Java集合类/07 Iterable&Ieterator.md @@ -0,0 +1,175 @@ +# Iterator Iterable ListIterator + +## 1 Iterator +所有Java集合类都提供iterator()方法,该方法返回Iterator的实例以遍历该集合中的元素。 + +```java +public interface Iterator { + boolean hasNext(); + E next(); + void remove(); +} +``` + +提供的API接口含义如下: + +- `hasNext()`:判断集合中是否存在下一个对象 +- `next()`:返回集合中的下一个对象,并将访问指针移动一位 +- `remove()`:删除集合中调用`next()`方法返回的对象.每次调用next()只能调用一次此方法。 + +在早期,遍历集合的方式只有一种,通过`Iterator`迭代器操作 + +```java +List list = new ArrayList<>(); +list.add(1); +list.add(2); +list.add(3); +Iterator iter = list.iterator(); +while (iter.hasNext()) { + Integer next = iter.next(); + System.out.println(next); + if (next == 2) { iter.remove(); } +} +``` + + + + +## 2 `Iterable` + +```java +public interface Iterable { + Iterator iterator(); + // JDK 1.8 + default void forEach(Consumer action) { + Objects.requireNonNull(action); + for (T t : this) { + action.accept(t); + } + } +} +``` + +可以看到`Iterable`接口里面提供了`Iterator`接口,所以实现了`Iterable`接口的集合依旧可以使用`迭代器`遍历和操作集合中的对象; + +而在 `JDK 1.8`中,`Iterable`提供了一个新的方法`forEach()`,它允许使用增强 for 循环遍历对象。 + +```java +List list = new ArrayList<>(); +for (Integer num : list) { + System.out.println(num); +} +``` + +我们通过命令:`javap -c`反编译上面的这段代码后,发现它只是 Java 中的一个`语法糖`,本质上还是调用`Iterator`去遍历。 + +![](image/2022-12-15-21-53-10.png) + +翻译成代码,就和一开始的`Iterator`迭代器遍历方式基本相同了。 + +```java +Iterator iter = list.iterator(); +while (iter.hasNext()) { + Integer num = iter.next(); + System.out.println(num); +} +``` + +> 还有更深层次的探讨:为什么要设计两个接口`Iterable`和`Iterator`,而不是保留其中一个就可以了。 +> +> 简单讲解:`Iterator`的保留可以让子类去**实现自己的迭代器**,而`Iterable`接口更加关注于`for-each`的增强语法。具体可参考:[Java中的Iterable与Iterator详解](https://www.cnblogs.com/litexy/p/9744241.html) + +## 3 Iterator 和Iterable + +关于`Iterator`和`Iterable`的讲解告一段落,下面来总结一下它们的重点: + +1. `Iterator`是提供集合操作内部对象的一个迭代器,它可以**遍历、移除**对象,且只能够**单向移动** +2. `Iterable`是对`Iterator`的封装,在`JDK 1.8`时,实现了`Iterable`接口的集合可以使用**增强 for 循环**遍历集合对象,我们通过**反编译**后发现底层还是使用`Iterator`迭代器进行遍历 + +等等,这一章还没完,还有一个`ListIterator`。它继承 Iterator 接口,在遍历`List`集合时可以从**任意索引下标**开始遍历,而且支持**双向遍历**。 + +ListIterator 存在于 List 集合之中,通过调用方法可以返回**起始下标**为 `index`的迭代器 + +```java +List list = new ArrayList<>(); +// 返回下标为0的迭代器 +ListIterator listIter1 = list.listIterator(); +// 返回下标为5的迭代器 +ListIterator listIter2 = list.listIterator(5); +``` + +ListIterator 中有几个重要方法,大多数方法与 Iterator 中定义的含义相同,但是比 Iterator 强大的地方是可以在**任意一个下标位置**返回该迭代器,且可以实现**双向遍历**。 + +```java +public interface ListIterator extends Iterator { + boolean hasNext(); + E next(); + boolean hasPrevious(); + E previous(); + int nextIndex(); + int previousIndex(); + void remove(); + // 替换当前下标的元素,即访问过的最后一个元素 + void set(E e); + void add(E e); +} +``` + + +## 4 ListIterator +### 简介 +* ListIterator支持在元素列表上的所有CRUD操作(CREATE,READ,UPDATE和DELETE)。 +* 与Iterator不同,ListIterator是bi-directional 。 它支持正向和反向迭代。 +* 它没有当前元素; 它的光标位置始终位于通过调用previous()返回的元素和通过调用next()返回的元素之间。 + +### 实例 + +```java +ArrayList list = new ArrayList<>(); + +list.add("A"); +list.add("B"); +list.add("C"); +list.add("D"); +list.add("E"); +list.add("F"); + +ListIterator listIterator = list.listIterator(); + +System.out.println("Forward iteration"); + +//Forward iterator +while(listIterator.hasNext()) { + System.out.print(listIterator.next() + ","); +} + +System.out.println("Backward iteration"); + +//Backward iterator +while(listIterator.hasPrevious()) { + System.out.print(listIterator.previous() + ","); +} + +System.out.println("Iteration from specified position"); + +//Start iterating from index 2 +listIterator = list.listIterator(2); + +while(listIterator.hasNext()) { + System.out.print(listIterator.next() + ","); +``` + + +### 主要方法 + +```java +void add(Object o) :将指定的元素插入列表(可选操作)。 +boolean hasNext() :如果在向前遍历列表时此列表迭代器包含更多元素,则返回true 。 +boolean hasPrevious() :如果在反向遍历列表时此列表迭代器包含更多元素,则返回true 。 +Object next() :返回列表中的下一个元素并前进光标位置。 +int nextIndex() :返回元素的索引,该元素的索引将由对next()的后续调用返回。 +Object previous() :返回列表中的上一个元素,并将光标位置向后移动。 +int previousIndex() :返回元素的索引,该元素的索引将由对next()的后续调用返回。 +void remove() :从列表中移除next()或previous()返回的最后一个元素(可选操作)。 +void set(Object o) :将next()或previous()返回的最后一个元素替换为指定的元素(可选操作)。 +``` diff --git a/Java基础教程/Java集合类/08 Comparable&Comparator.md b/Java基础教程/Java集合类/08 Comparable&Comparator.md new file mode 100644 index 00000000..dc64fc97 --- /dev/null +++ b/Java基础教程/Java集合类/08 Comparable&Comparator.md @@ -0,0 +1,186 @@ + +## Comparable + +### 概述 +Java Comparable接口,用于根据对象的natural order对array或对象list进行natural order 。 元素的自然排序是通过在对象中实现其compareTo()方法来实现的。 +```java +public interface Comparable +{ + public int compareTo(T o); +} +``` + +### 使用 +```java +import java.time.LocalDate; + +public class Employee implements Comparable { + + private Long id; + private String name; + private LocalDate dob; + + @Override + public int compareTo(Employee o) + { + return this.getId().compareTo( o.getId() ); + } +} + +``` +* 使用Collections.sort()方法对对象list进行排序。 +* 使用Arrays.sort()方法对对象array进行排序。 +* Collections.reverseOrder() + + +## 2 Comparator比较器 + +我们还是先研究这个方法 + +`public static void sort(List list)`:将集合中元素按照默认规则排序。 + +不过这次存储的是字符串类型。 + +```java +public class CollectionsDemo2 { + public static void main(String[] args) { + ArrayList list = new ArrayList(); + list.add("cba"); + list.add("aba"); + list.add("sba"); + list.add("nba"); + //排序方法 + Collections.sort(list); + System.out.println(list); + } +} +``` + +结果: + +``` +[aba, cba, nba, sba] +``` + + +* 使用Collections.sort(list, Comparator)方法按提供的比较器实例施加的顺序对对象list进行排序。 +* 使用Arrays.sort(array, Comparator)方法按提供的比较器实例施加的顺序对对象array进行排序。 + +### Comparator.compare() + +* ` public int compare(String o1, String o2)`:比较其两个参数的顺序。 + +> 两个对象比较的结果有三种:大于,等于,小于。 +> +> 如果要按照升序排序, +> 则o1 小于o2,返回(负数),相等返回0,01大于02返回(正数) +> 如果要按照降序排序 +> 则o1 小于o2,返回(正数),相等返回0,01大于02返回(负数) + +操作如下: + +```java +public class CollectionsDemo3 { + public static void main(String[] args) { + ArrayList list = new ArrayList(); + list.add("cba"); + list.add("aba"); + list.add("sba"); + list.add("nba"); + //排序方法 按照第一个单词的降序 + Collections.sort(list, new Comparator() { + @Override + public int compare(String o1, String o2) { + return o2.charAt(0) - o1.charAt(0); + } + }); + System.out.println(list); + } +} +``` + +结果如下: + +``` +[sba, nba, cba, aba] +``` + +### Collections.comparing() +该实用程序方法接受一个为类提取排序键的函数。 本质上,这是一个将对类对象进行排序的字段。 + +```java +//Order by name +Comparator.comparing(Employee::getName); + +//Order by name in reverse order +Comparator.comparing(Employee::getName).reversed(); + +//Order by id field +Comparator.comparing(Employee::getId); + +//Order by employee age +Comparator.comparing(Employee::getDate); + +ArrayList list = new ArrayList<>(); + +list.add(new Employee(22l, "Lokesh", LocalDate.now())); +list.add(new Employee(30l, "Bob", LocalDate.now())); +list.add(new Employee(18l, "Alex", LocalDate.now())); +list.add(new Employee(5l, "David", LocalDate.now())); +list.add(new Employee(600l, "Charles", LocalDate.now())); + +Collections.sort(list, Comparator.comparing( Employee::getName ).reversed()); + +System.out.println(list); +``` + +### Collections.thenComparing() +此实用程序方法用于group by sort 。 + +```java +//Order by name and then by age +Comparator.comparing(Employee::getName) + .thenComparing(Employee::getDob); + +//Order by name -> date of birth -> id +Comparator.comparing(Employee::getName) + .thenComparing(Employee::getDob) + .thenComparing(Employee::getId); + +ArrayList list = new ArrayList<>(); + +list.add(new Employee(22l, "Lokesh", LocalDate.now())); +list.add(new Employee(30l, "Lokesh", LocalDate.now())); +list.add(new Employee(18l, "Alex", LocalDate.now())); +list.add(new Employee(5l, "Lokesh", LocalDate.now())); +list.add(new Employee(600l, "Charles", LocalDate.now())); + +Comparator groupByComparator = Comparator.comparing(Employee::getName) + .thenComparing(Employee::getDob) + .thenComparing(Employee::getId); + +Collections.sort(list, groupByComparator); + +System.out.println(list); + +``` +### Collections.reverseOrder() +此实用程序方法返回一个比较器,该比较器对实现Comparable接口的对象集合强加natural ordering或total ordering的逆序。 + +```java +//Reverse of natural order as specified in +//Comparable interface's compareTo() method + +Comparator.reversed(); + +//Reverse of order by name + +Comparator.comparing(Employee::getName).reversed(); + +``` + +## 3 简述Comparable和Comparator两个接口的区别 + +**Comparable**:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。 + +**Comparator**:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。 \ No newline at end of file diff --git a/Java基础教程/Java集合类/09 Sort.md b/Java基础教程/Java集合类/09 Sort.md new file mode 100644 index 00000000..90ed893e --- /dev/null +++ b/Java基础教程/Java集合类/09 Sort.md @@ -0,0 +1,159 @@ +## 1 数组排序Arrays.sort +Java程序使用Arrays.sort()方法升序排序 +```java +import java.util.Arrays; + +public class JavaSortExample +{ + public static void main(String[] args) + { + //Unsorted array + Integer[] numbers = new Integer[] { 15, 11, 9, 55, 47, 18, 520, 1123, 366, 420 }; + + //Sort the array + Arrays.sort(numbers); + + //Print array to confirm + System.out.println(Arrays.toString(numbers)); + } +} +``` +### 逆序 + +```java +Integer[] numbers = new Integer[] { 15, 11, 9, 55, 47, 18, 520, 1123, 366, 420 }; + +//Sort the array in reverse order +Arrays.sort(numbers, Collections.reverseOrder()); + +//Print array to confirm +System.out.println(Arrays.toString(numbers)); +``` + +### 部分排序 + +```java +//Unsorted array +Integer[] numbers = new Integer[] { 15, 11, 9, 55, 47, 18, 1123, 520, 366, 420 }; + +//Sort the array +Arrays.sort(numbers, 2, 6); + +//Print array to confirm +System.out.println(Arrays.toString(numbers)); +``` + +### 并发排序 + +它将数组分解为不同的子数组,并且每个子数组在different threads使用Arrays.sort()进行排序。 最终,所有排序的子数组将合并为一个数组。 + +```java +Arrays.parallelSort(numbers); + +Arrays.parallelSort(numbers, 2, 6); + +Arrays.parallelSort(numbers, Collections.reverseOrder()); +``` + + +> 不支持集合排序。转换为列表,然后排序,然后转换为集合。 +> 不支持map排序。获取keyset,然后排序访问。 +> 但是treeSet和TreeMap本身都是排序好的。 + +## 2 字符串排序方法 + +### Stream API +使用Stream.sorted() API对字符串的字符进行排序的示例。 + +```java +String randomString = "adcbgekhs"; + +String sortedChars = Stream.of( randomString.split("") ) + .sorted() + .collect(Collectors.joining()); + +System.out.println(sortedChars); // abcdeghks +``` + +### Arrays.sort() +使用Arrays.sort()方法对字符串排序的示例。 + +```java +String randomString = "adcbgekhs"; + +//Convert string to char array +char[] chars = randomString.toCharArray(); + +//Sort char array +Arrays.sort(chars); + +//Convert char array to string +String sortedString = String.valueOf(chars); + +System.out.println(sortedChars); // abcdeghks +``` + + +## 3 ArraysList排序 + +### 自带的sort方法 + +```java +//Unsorted list +List names = Arrays.asList("Alex", "Charles", "Brian", "David"); + +//1. Natural order +names.sort( Comparator.comparing( String::toString ) ); + +System.out.println(names); + +//2. Reverse order +names.sort( Comparator.comparing( String::toString ).reversed() ); + +System.out.println(names); +``` + +### Collections.sort + +```java +//Unsorted list +List names = Arrays.asList("Alex", "Charles", "Brian", "David"); + +//1. Natural order +Collections.sort(names); + +System.out.println(names); + +//2. Reverse order +Collections.sort(names, Collections.reverseOrder()); + +System.out.println(names); +``` + +### Stream + +```java +//Unsorted list +List names = Arrays.asList("Alex", "Charles", "Brian", "David"); + +//1. Natural order +List sortedNames = names +.stream() +.sorted(Comparator.comparing(String::toString)) +.collect(Collectors.toList()); + +System.out.println(sortedNames); + +//2. Reverse order +List reverseSortedNames = names + .stream() + .sorted(Comparator.comparing(String::toString).reversed()) + .collect(Collectors.toList()); + +System.out.println(reverseSortedNames); +``` + +## 4 ObjectSort + +将Comparable&Comparator + diff --git a/Java基础教程/Java集合类/09 Stream.md b/Java基础教程/Java集合类/09 Stream.md new file mode 100644 index 00000000..abcc55fb --- /dev/null +++ b/Java基础教程/Java集合类/09 Stream.md @@ -0,0 +1,771 @@ +# Java 8 数据流教程 + + +## 1 数据流原理 +### 基本原理 + +> 数据流和输入输出流不同 +这个示例驱动的教程是Java8**数据流**(Stream)的深入总结。当我第一次看到`Stream`API时,我非常疑惑,因为它听起来和Java IO的`InputStream` 和 `OutputStream`一样。但是Java8的数据流是完全不同的东西。 + + +> 在函数式编程中,单体是一个结构,表示定义为步骤序列的计算。单体结构的类型定义了它对链式操作,或具有相同类型的嵌套函数的含义。 + +### 数据流的链式操作 +数据流表示元素的序列,并支持不同种类的操作来执行元素上的计算: + +```java +List myList = + Arrays.asList("a1", "a2", "b1", "c2", "c1"); + +myList + .stream() + .filter(s -> s.startsWith("c")) + .map(String::toUpperCase) + .sorted() + .forEach(System.out::println); +``` +* 这种数据流的链式操作也叫作操作流水线。 +* 多数数据流操作都接受一些lambda表达式参数,函数式接口用来指定操作的具体行为。这些操作的大多数必须是无干扰而且是无状态的。 + * 当一个函数不修改数据流的底层数据源,它就是**无干扰的**。例如,在上面的例子中,没有任何lambda表达式通过添加或删除集合元素修改`myList`。 + * 当一个函数的操作的执行是确定性的,它就是**无状态的**。例如,在上面的例子中,没有任何lambda表达式依赖于外部作用域中任何在操作过程中可变的变量或状态。 + +## 2 数据流的不同类型 +数据流可以从多种数据源创建, +### 从集合创建 +`List`和`Set`支持新方法`stream()` 和 `parallelStream()`,来创建串行流或并行流。并行流能够在多个线程上执行操作。我们现在来看看串行流: + +```java +Arrays.asList("a1", "a2", "a3") + .stream() + .findFirst() + .ifPresent(System.out::println); // a1 +``` + +### Stream类创建 +在对象列表上调用`stream()`方法会返回一个通常的对象流。但是我们不需要创建一个集合来创建数据流,就像下面那样: + +```java +Stream.of("a1", "a2", "a3") + .findFirst() + .ifPresent(System.out::println); // a1 +``` + +只要使用`Stream.of()`,就可以从一系列对象引用中创建数据流。 + +### 基本数据流 +Java8还自带了特殊种类的流,用于处理基本数据类型`int`、`long` 和 `double`。`IntStream`、`LongStream` 和 `DoubleStream`。 + +`IntStream`可以使用`IntStream.range()`替换通常的`for`循环: + +```java +IntStream.range(1, 4) + .forEach(System.out::println); +// 1 +// 2 +// 3 +``` + +所有这些基本数据流都像通常的对象数据流一样,但有一些不同。基本的数据流使用特殊的lambda表达式,例如,`IntFunction`而不是`Function`,`IntPredicate`而不是`Predicate`。而且基本数据流支持额外的聚合终止操作`sum()`和`average()`: + +```java +Arrays.stream(new int[] {1, 2, 3}) + .map(n -> 2 * n + 1) + .average() + .ifPresent(System.out::println); // 5.0 +``` + +有时需要将通常的对象数据流转换为基本数据流,或者相反。出于这种目的,对象数据流支持特殊的映射操作`mapToInt()`、`mapToLong()` 和 `mapToDouble()`: + +```java +Stream.of("a1", "a2", "a3") + .map(s -> s.substring(1)) + .mapToInt(Integer::parseInt) + .max() + .ifPresent(System.out::println); // 3 +``` + +基本数据流可以通过`mapToObj()`转换为对象数据流: + +```java +IntStream.range(1, 4) + .mapToObj(i -> "a" + i) + .forEach(System.out::println); + +// a1 +// a2 +// a3 +``` + +下面是组合示例:浮点数据流首先映射为整数数据流,之后映射为字符串的对象数据流: + +```java +Stream.of(1.0, 2.0, 3.0) + .mapToInt(Double::intValue) + .mapToObj(i -> "a" + i) + .forEach(System.out::println); + +// a1 +// a2 +// a3 +``` + +## 3 处理顺序 + +### 衔接操作和终止操作 +衔接操作的一个重要特性就是延迟性。观察下面没有终止操作的例子: + +```java +Stream.of("d2", "a2", "b1", "b3", "c") + .filter(s -> { + System.out.println("filter: " + s); + return true; + }); +``` + +执行这段代码时,不向控制台打印任何东西。这是因为衔接操作只在终止操作调用时被执行。 + +### 垂直执行 +让我们通过添加终止操作`forEach`来扩展这个例子: + +```java +Stream.of("d2", "a2", "b1", "b3", "c") + .filter(s -> { + System.out.println("filter: " + s); + return true; + }) + .forEach(s -> System.out.println("forEach: " + s)); +``` + +执行这段代码会得到如下输出: + +``` +filter: d2 +forEach: d2 +filter: a2 +forEach: a2 +filter: b1 +forEach: b1 +filter: b3 +forEach: b3 +filter: c +forEach: c +``` + +结果的顺序可能出人意料。原始的方法会在数据流的所有元素上,一个接一个地水平执行所有操作。但是每个元素在调用链上垂直移动。第一个字符串`"d2"`首先经过`filter`然后是`forEach`,执行完后才开始处理第二个字符串`"a2"`。 + +这种行为可以减少每个元素上所执行的实际操作数量,就像我们在下个例子中看到的那样: + +```java +Stream.of("d2", "a2", "b1", "b3", "c") + .map(s -> { + System.out.println("map: " + s); + return s.toUpperCase(); + }) + .anyMatch(s -> { + System.out.println("anyMatch: " + s); + return s.startsWith("A"); + }); + +// map: d2 +// anyMatch: D2 +// map: a2 +// anyMatch: A2 +``` + +只要提供的数据元素满足了谓词,`anyMatch`操作就会返回`true`。对于第二个传递`"A2"`的元素,它的结果为真。由于数据流的链式调用是垂直执行的,`map`这里只需要执行两次。所以`map`会执行尽可能少的次数,而不是把所有元素都映射一遍。 + +### 先过滤排除 + +下面的例子由两个衔接操作`map`和`filter`,以及一个终止操作`forEach`组成。让我们再来看看这些操作如何执行: + +```java +Stream.of("d2", "a2", "b1", "b3", "c") + .map(s -> { + System.out.println("map: " + s); + return s.toUpperCase(); + }) + .filter(s -> { + System.out.println("filter: " + s); + return s.startsWith("A"); + }) + .forEach(s -> System.out.println("forEach: " + s)); + +// map: d2 +// filter: D2 +// map: a2 +// filter: A2 +// forEach: A2 +// map: b1 +// filter: B1 +// map: b3 +// filter: B3 +// map: c +// filter: C +``` + +就像你可能猜到的那样,`map`和`filter`会对底层集合的每个字符串调用五次,而`forEach`只会调用一次。 + +如果我们调整操作顺序,将`filter`移动到调用链的顶端,就可以极大减少操作的执行次数: + +```java +Stream.of("d2", "a2", "b1", "b3", "c") + .filter(s -> { + System.out.println("filter: " + s); + return s.startsWith("a"); + }) + .map(s -> { + System.out.println("map: " + s); + return s.toUpperCase(); + }) + .forEach(s -> System.out.println("forEach: " + s)); + +// filter: d2 +// filter: a2 +// map: a2 +// forEach: A2 +// filter: b1 +// filter: b3 +// filter: c +``` + +## 4 复用数据流 + +Java8的数据流不能被复用。一旦你调用了任何终止操作,数据流就关闭了: + +```java +Stream stream = + Stream.of("d2", "a2", "b1", "b3", "c") + .filter(s -> s.startsWith("a")); + +stream.anyMatch(s -> true); // ok +stream.noneMatch(s -> true); // exception +``` + +在相同数据流上,在`anyMatch`之后调用`noneMatch`会产生下面的异常: + +``` +java.lang.IllegalStateException: stream has already been operated upon or closed + at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229) + at java.util.stream.ReferencePipeline.noneMatch(ReferencePipeline.java:459) + at com.winterbe.java8.Streams5.test7(Streams5.java:38) + at com.winterbe.java8.Streams5.main(Streams5.java:28) +``` + +要克服这个限制,我们需要为每个我们想要执行的终止操作创建新的数据流调用链。例如,我们创建一个数据流供应器,来构建新的数据流,并且设置好所有衔接操作: + +```java +Supplier> streamSupplier = + () -> Stream.of("d2", "a2", "b1", "b3", "c") + .filter(s -> s.startsWith("a")); + +streamSupplier.get().anyMatch(s -> true); // ok +streamSupplier.get().noneMatch(s -> true); // ok +``` + +每次对`get()`的调用都构造了一个新的数据流,我们将其保存来调用终止操作。 + +## 5 高级操作 + +数据流执行大量的不同操作。我们已经了解了一些最重要的操作,例如`filter`和`map`。我将它们留给你来探索所有其他的可用操作。下面让我们深入了解一些更复杂的操作:`collect`、`flatMap`和`reduce`。 + +这一节的大部分代码示例使用下面的`Person`列表来演示: + +```java +class Person { + String name; + int age; + + Person(String name, int age) { + this.name = name; + this.age = age; + } + + @Override + public String toString() { + return name; + } +} + +List persons = + Arrays.asList( + new Person("Max", 18), + new Person("Peter", 23), + new Person("Pamela", 23), + new Person("David", 12)); +``` + +### `collect` + +`collect`是非常有用的终止操作,将流中的元素存放在不同类型的结果中,例如`List`、`Set`或者`Map`。`collect`接受收集器(Collector),它由四个不同的操作组成:供应器(supplier)、累加器(accumulator)、组合器(combiner)和终止器(finisher)。这在开始听起来十分复杂,但是Java8通过内置的`Collectors`类支持多种内置的收集器。所以对于大部分常见操作,你并不需要自己实现收集器。 + +让我们以一个非常常见的用例来开始: + +```java +List filtered = + persons + .stream() + .filter(p -> p.name.startsWith("P")) + .collect(Collectors.toList()); + +System.out.println(filtered); // [Peter, Pamela] +``` + +就像你看到的那样,它非常简单,只是从流的元素中构造了一个列表。如果需要以`Set`来替代`List`,只需要使用`Collectors.toSet()`就好了。 + +下面的例子按照年龄对所有人进行分组: + +```java +Map> personsByAge = persons + .stream() + .collect(Collectors.groupingBy(p -> p.age)); + +personsByAge + .forEach((age, p) -> System.out.format("age %s: %s\n", age, p)); + +// age 18: [Max] +// age 23: [Peter, Pamela] +// age 12: [David] +``` + +收集器十分灵活。你也可以在流的元素上执行聚合,例如,计算所有人的平均年龄: + +```java +Double averageAge = persons + .stream() + .collect(Collectors.averagingInt(p -> p.age)); + +System.out.println(averageAge); // 19.0 +``` + +如果你对更多统计学方法感兴趣,概要收集器返回一个特殊的内置概要统计对象,所以我们可以简单计算最小年龄、最大年龄、算术平均年龄、总和和数量。 + +```java +IntSummaryStatistics ageSummary = + persons + .stream() + .collect(Collectors.summarizingInt(p -> p.age)); + +System.out.println(ageSummary); +// IntSummaryStatistics{count=4, sum=76, min=12, average=19.000000, max=23} +``` + +下面的例子将所有人连接为一个字符串: + +```java +String phrase = persons + .stream() + .filter(p -> p.age >= 18) + .map(p -> p.name) + .collect(Collectors.joining(" and ", "In Germany ", " are of legal age.")); + +System.out.println(phrase); +// In Germany Max and Peter and Pamela are of legal age. +``` + +连接收集器接受分隔符,以及可选的前缀和后缀。 + +既然我们知道了一些最强大的内置收集器,让我们来尝试构建自己的特殊收集器吧。我们希望将流中的所有人转换为一个字符串,包含所有大写的名称,并以`|`分割。为了完成它,我们通过`Collector.of()`创建了一个新的收集器。我们需要传递一个收集器的四个组成部分:供应器、累加器、组合器和终止器。 + +```java +Collector personNameCollector = + Collector.of( + () -> new StringJoiner(" | "), // supplier + (j, p) -> j.add(p.name.toUpperCase()), // accumulator + (j1, j2) -> j1.merge(j2), // combiner + StringJoiner::toString); // finisher + +String names = persons + .stream() + .collect(personNameCollector); + +System.out.println(names); // MAX | PETER | PAMELA | DAVID +``` + +由于Java中的字符串是不可变的,我们需要一个助手类`StringJointer`。让收集器构造我们的字符串。供应器最开始使用相应的分隔符构造了这样一个`StringJointer`。累加器用于将每个人的大写名称加到`StringJointer`中。组合器知道如何把两个`StringJointer`合并为一个。最后一步,终结器从`StringJointer`构造出预期的字符串。 + +### `flatMap` + +我们已经了解了如何通过使用`map`操作,将流中的对象转换为另一种类型。`map`有时十分受限,因为每个对象只能映射为一个其它对象。但如何我希望将一个对象转换为多个或零个其他对象呢?`flatMap`这时就会派上用场。 + +`flatMap`将流中的每个元素,转换为其它对象的流。所以每个对象会被转换为零个、一个或多个其它对象,以流的形式返回。这些流的内容之后会放进`flatMap`所返回的流中。 + +在我们了解`flatMap`如何使用之前,我们需要相应的类型体系: + +```java +class Foo { + String name; + List bars = new ArrayList<>(); + + Foo(String name) { + this.name = name; + } +} + +class Bar { + String name; + + Bar(String name) { + this.name = name; + } +} +``` + +下面,我们使用我们自己的关于流的知识来实例化一些对象: + +```java +List foos = new ArrayList<>(); + +// create foos +IntStream + .range(1, 4) + .forEach(i -> foos.add(new Foo("Foo" + i))); + +// create bars +foos.forEach(f -> + IntStream + .range(1, 4) + .forEach(i -> f.bars.add(new Bar("Bar" + i + " <- " + f.name)))); +``` + +现在我们拥有了含有三个`foo`的列表,每个都含有三个`bar`。 + +`flatMap`接受返回对象流的函数。所以为了处理每个`foo`上的`bar`对象,我们需要传递相应的函数: + +```java +foos.stream() + .flatMap(f -> f.bars.stream()) + .forEach(b -> System.out.println(b.name)); + +// Bar1 <- Foo1 +// Bar2 <- Foo1 +// Bar3 <- Foo1 +// Bar1 <- Foo2 +// Bar2 <- Foo2 +// Bar3 <- Foo2 +// Bar1 <- Foo3 +// Bar2 <- Foo3 +// Bar3 <- Foo3 +``` + +像你看到的那样,我们成功地将含有三个`foo`对象中的流转换为含有九个`bar`对象的流。 + +最后,上面的代码示例可以简化为流式操作的单一流水线: + +```java +IntStream.range(1, 4) + .mapToObj(i -> new Foo("Foo" + i)) + .peek(f -> IntStream.range(1, 4) + .mapToObj(i -> new Bar("Bar" + i + " <- " + f.name)) + .forEach(f.bars::add)) + .flatMap(f -> f.bars.stream()) + .forEach(b -> System.out.println(b.name)); +``` + +`flatMap`也可用于Java8引入的`Optional`类。`Optional`的`flatMap`操作返回一个`Optional`或其他类型的对象。所以它可以用于避免烦人的`null`检查。 + +考虑像这样更复杂的层次结构: + +```java +class Outer { + Nested nested; +} + +class Nested { + Inner inner; +} + +class Inner { + String foo; +} +``` + +为了处理外层示例上的内层字符串`foo`,你需要添加多个`null`检查来避免潜在的`NullPointerException`: + +```java +Outer outer = new Outer(); +if (outer != null && outer.nested != null && outer.nested.inner != null) { + System.out.println(outer.nested.inner.foo); +} +``` + +可以使用`Optional`的`flatMap`操作来完成相同的行为: + +```java +Optional.of(new Outer()) + .flatMap(o -> Optional.ofNullable(o.nested)) + .flatMap(n -> Optional.ofNullable(n.inner)) + .flatMap(i -> Optional.ofNullable(i.foo)) + .ifPresent(System.out::println); +``` + +如果存在的话,每个`flatMap`的调用都会返回预期对象的`Optional`包装,否则为`null`的`Optional`包装。 + +### `reduce` + +归约操作将所有流中的元素组合为单一结果。Java8支持三种不同类型的`reduce`方法。第一种将流中的元素归约为流中的一个元素。让我们看看我们如何使用这个方法来计算出最老的人: + +```java +persons + .stream() + .reduce((p1, p2) -> p1.age > p2.age ? p1 : p2) + .ifPresent(System.out::println); // Pamela +``` + +`reduce`方法接受`BinaryOperator`积累函数。它实际上是两个操作数类型相同的`BiFunction`。`BiFunction`就像是`Function`,但是接受两个参数。示例中的函数比较两个人的年龄,来返回年龄较大的人。 + +第二个`reduce`方法接受一个初始值,和一个`BinaryOperator`累加器。这个方法可以用于从流中的其它`Person`对象中构造带有聚合后名称和年龄的新`Person`对象。 + +```java +Person result = + persons + .stream() + .reduce(new Person("", 0), (p1, p2) -> { + p1.age += p2.age; + p1.name += p2.name; + return p1; + }); + +System.out.format("name=%s; age=%s", result.name, result.age); +// name=MaxPeterPamelaDavid; age=76 +``` + +第三个`reduce`对象接受三个参数:初始值,`BiFunction`累加器和`BinaryOperator`类型的组合器函数。由于初始值的类型不一定为`Person`,我们可以使用这个归约函数来计算所有人的年龄总和。: + +```java +Integer ageSum = persons + .stream() + .reduce(0, (sum, p) -> sum += p.age, (sum1, sum2) -> sum1 + sum2); + +System.out.println(ageSum); // 76 +``` + +你可以看到结果是76。但是背后发生了什么?让我们通过添加一些调试输出来扩展上面的代码: + +```java +Integer ageSum = persons + .stream() + .reduce(0, + (sum, p) -> { + System.out.format("accumulator: sum=%s; person=%s\n", sum, p); + return sum += p.age; + }, + (sum1, sum2) -> { + System.out.format("combiner: sum1=%s; sum2=%s\n", sum1, sum2); + return sum1 + sum2; + }); + +// accumulator: sum=0; person=Max +// accumulator: sum=18; person=Peter +// accumulator: sum=41; person=Pamela +// accumulator: sum=64; person=David +``` + +你可以看到,累加器函数做了所有工作。它首先使用初始值`0`和第一个人Max来调用累加器。接下来的三步中`sum`会持续增加,直到76。 + +等一下。好像组合器从来没有调用过?以并行方式执行相同的流会揭开这个秘密: + +```java +Integer ageSum = persons + .parallelStream() + .reduce(0, + (sum, p) -> { + System.out.format("accumulator: sum=%s; person=%s\n", sum, p); + return sum += p.age; + }, + (sum1, sum2) -> { + System.out.format("combiner: sum1=%s; sum2=%s\n", sum1, sum2); + return sum1 + sum2; + }); + +// accumulator: sum=0; person=Pamela +// accumulator: sum=0; person=David +// accumulator: sum=0; person=Max +// accumulator: sum=0; person=Peter +// combiner: sum1=18; sum2=23 +// combiner: sum1=23; sum2=12 +// combiner: sum1=41; sum2=35 +``` + +这个流的并行执行行为会完全不同。现在实际上调用了组合器。由于累加器被并行调用,组合器需要用于计算部分累加值的总和。 + +下一节我们会深入了解并行流。 + +## 6 并行流 + +流可以并行执行,在大量输入元素上可以提升运行时的性能。并行流使用公共的`ForkJoinPool`,由`ForkJoinPool.commonPool()`方法提供。底层线程池的大小最大为五个线程 -- 取决于CPU的物理核数。 + +```java +ForkJoinPool commonPool = ForkJoinPool.commonPool(); +System.out.println(commonPool.getParallelism()); // 3 +``` + +在我的机器上,公共池默认初始化为3。这个值可以通过设置下列JVM参数来增减: + +``` +-Djava.util.concurrent.ForkJoinPool.common.parallelism=5 +``` + +集合支持`parallelStream()`方法来创建元素的并行流。或者你可以在已存在的数据流上调用衔接方法`parallel()`,将串行流转换为并行流。 + +为了描述并行流的执行行为,下面的例子向`sout`打印了当前线程的信息。 + +```java +Arrays.asList("a1", "a2", "b1", "c2", "c1") + .parallelStream() + .filter(s -> { + System.out.format("filter: %s [%s]\n", + s, Thread.currentThread().getName()); + return true; + }) + .map(s -> { + System.out.format("map: %s [%s]\n", + s, Thread.currentThread().getName()); + return s.toUpperCase(); + }) + .forEach(s -> System.out.format("forEach: %s [%s]\n", + s, Thread.currentThread().getName())); +``` + +通过分析调试输出,我们可以对哪个线程用于执行流式操作拥有更深入的理解: + +``` +filter: b1 [main] +filter: a2 [ForkJoinPool.commonPool-worker-1] +map: a2 [ForkJoinPool.commonPool-worker-1] +filter: c2 [ForkJoinPool.commonPool-worker-3] +map: c2 [ForkJoinPool.commonPool-worker-3] +filter: c1 [ForkJoinPool.commonPool-worker-2] +map: c1 [ForkJoinPool.commonPool-worker-2] +forEach: C2 [ForkJoinPool.commonPool-worker-3] +forEach: A2 [ForkJoinPool.commonPool-worker-1] +map: b1 [main] +forEach: B1 [main] +filter: a1 [ForkJoinPool.commonPool-worker-3] +map: a1 [ForkJoinPool.commonPool-worker-3] +forEach: A1 [ForkJoinPool.commonPool-worker-3] +forEach: C1 [ForkJoinPool.commonPool-worker-2] +``` + +就像你看到的那样,并行流使用了所有公共的`ForkJoinPool`中的可用线程来执行流式操作。在连续的运行中输出可能有所不同,因为所使用的特定线程是非特定的。 + +让我们通过添加额外的流式操作`sort`来扩展这个示例: + +```java +Arrays.asList("a1", "a2", "b1", "c2", "c1") + .parallelStream() + .filter(s -> { + System.out.format("filter: %s [%s]\n", + s, Thread.currentThread().getName()); + return true; + }) + .map(s -> { + System.out.format("map: %s [%s]\n", + s, Thread.currentThread().getName()); + return s.toUpperCase(); + }) + .sorted((s1, s2) -> { + System.out.format("sort: %s <> %s [%s]\n", + s1, s2, Thread.currentThread().getName()); + return s1.compareTo(s2); + }) + .forEach(s -> System.out.format("forEach: %s [%s]\n", + s, Thread.currentThread().getName())); +``` + +结果起初可能比较奇怪: + +``` +filter: c2 [ForkJoinPool.commonPool-worker-3] +filter: c1 [ForkJoinPool.commonPool-worker-2] +map: c1 [ForkJoinPool.commonPool-worker-2] +filter: a2 [ForkJoinPool.commonPool-worker-1] +map: a2 [ForkJoinPool.commonPool-worker-1] +filter: b1 [main] +map: b1 [main] +filter: a1 [ForkJoinPool.commonPool-worker-2] +map: a1 [ForkJoinPool.commonPool-worker-2] +map: c2 [ForkJoinPool.commonPool-worker-3] +sort: A2 <> A1 [main] +sort: B1 <> A2 [main] +sort: C2 <> B1 [main] +sort: C1 <> C2 [main] +sort: C1 <> B1 [main] +sort: C1 <> C2 [main] +forEach: A1 [ForkJoinPool.commonPool-worker-1] +forEach: C2 [ForkJoinPool.commonPool-worker-3] +forEach: B1 [main] +forEach: A2 [ForkJoinPool.commonPool-worker-2] +forEach: C1 [ForkJoinPool.commonPool-worker-1] +``` + +`sort`看起来只在主线程上串行执行。实际上,并行流上的`sort`在背后使用了Java8中新的方法`Arrays.parallelSort()`。如[javadoc](https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#parallelSort-T:A-)所说,这个方法会参照数据长度来决定以串行或并行来执行。 + +> 如果指定数据的长度小于最小粒度,它使用相应的`Arrays.sort`方法来排序。 + +返回上一节中`reduce`的例子。我们已经发现了组合器函数只在并行流中调用,而不在串行流中调用。让我们来观察实际上涉及到哪个线程: + +```java +List persons = Arrays.asList( + new Person("Max", 18), + new Person("Peter", 23), + new Person("Pamela", 23), + new Person("David", 12)); + +persons + .parallelStream() + .reduce(0, + (sum, p) -> { + System.out.format("accumulator: sum=%s; person=%s [%s]\n", + sum, p, Thread.currentThread().getName()); + return sum += p.age; + }, + (sum1, sum2) -> { + System.out.format("combiner: sum1=%s; sum2=%s [%s]\n", + sum1, sum2, Thread.currentThread().getName()); + return sum1 + sum2; + }); +``` + +控制台的输出表明,累加器和组合器都在所有可用的线程上并行执行: + +``` +accumulator: sum=0; person=Pamela; [main] +accumulator: sum=0; person=Max; [ForkJoinPool.commonPool-worker-3] +accumulator: sum=0; person=David; [ForkJoinPool.commonPool-worker-2] +accumulator: sum=0; person=Peter; [ForkJoinPool.commonPool-worker-1] +combiner: sum1=18; sum2=23; [ForkJoinPool.commonPool-worker-1] +combiner: sum1=23; sum2=12; [ForkJoinPool.commonPool-worker-2] +combiner: sum1=41; sum2=35; [ForkJoinPool.commonPool-worker-2] +``` + +总之,并行流对拥有大量输入元素的数据流具有极大的性能提升。但是要记住一些并行流的操作,例如`reduce`和`collect`需要额外的计算(组合操作),这在串行执行时并不需要。 + +此外我们已经了解,所有并行流操作都共享相同的JVM相关的公共`ForkJoinPool`。所以你可能需要避免实现又慢又卡的流式操作,因为它可能会拖慢你应用中严重依赖并行流的其它部分。 + + + +## 7 功能列表 + + +### 中间管道 +![](image/2022-12-15-22-45-56.png) + + +### 终止管道 + +![](image/2022-12-15-22-46-12.png) + + +### map&flatmap + +map与flatMap都是用于转换已有的元素为其它元素,区别点在于: +* map 必须是一对一的,即每个元素都只能转换为1个新的元素 +* flatMap 可以是一对多的,即每个元素都可以转换为1个或者多个新的元素 + +![](image/2022-12-15-22-46-59.png) + + +### peek和foreach方法 +peek和foreach,都可以用于对元素进行遍历然后逐个的进行处理。 + +但根据前面的介绍,peek属于中间方法,而foreach属于终止方法。这也就意味着peek只能作为管道中途的一个处理步骤,而没法直接执行得到结果,其后面必须还要有其它终止操作的时候才会被执行;而foreach作为无返回值的终止方法,则可以直接执行相关操作。 \ No newline at end of file diff --git a/Java基础教程/Java集合类/12 JavaQueue.md b/Java基础教程/Java集合类/12 JavaQueue.md deleted file mode 100644 index e69de29b..00000000 diff --git a/Java基础教程/Java集合类/13 JavaSet.md b/Java基础教程/Java集合类/13 JavaSet.md deleted file mode 100644 index e69de29b..00000000 diff --git a/Java基础教程/Java集合类/14 JavaMap.md b/Java基础教程/Java集合类/14 JavaMap.md deleted file mode 100644 index e69de29b..00000000 diff --git a/Java基础教程/Java集合类/image/2022-12-15-16-54-49.png b/Java基础教程/Java集合类/image/2022-12-15-16-54-49.png new file mode 100644 index 0000000000000000000000000000000000000000..a61008f6d3e98c728105986a99ba122429cc2ccb GIT binary patch literal 46506 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 literal 0 HcmV?d00001 diff --git a/Java基础教程/Java集合类/image/2022-12-15-16-54-56.png b/Java基础教程/Java集合类/image/2022-12-15-16-54-56.png new file mode 100644 index 0000000000000000000000000000000000000000..a61008f6d3e98c728105986a99ba122429cc2ccb GIT binary patch literal 46506 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 literal 0 HcmV?d00001 diff --git a/Java基础教程/Java集合类/image/2022-12-15-16-55-23.png b/Java基础教程/Java集合类/image/2022-12-15-16-55-23.png new file mode 100644 index 0000000000000000000000000000000000000000..ed1b20d53c3b9c7e02913fe3f4046f92a11bb9bf GIT binary patch literal 24217 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 literal 0 HcmV?d00001 diff --git a/Java基础教程/Java集合类/image/2022-12-15-17-11-05.png b/Java基础教程/Java集合类/image/2022-12-15-17-11-05.png new file mode 100644 index 0000000000000000000000000000000000000000..2e0747aeaee31d0f191ae2eac3e2dc40b24afbc4 GIT binary patch literal 78586 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ν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 S*1EL}K;Y@>=d#Wzp$P!L(3s@_ literal 0 HcmV?d00001 diff --git a/Java基础教程/Java集合类/image/2022-12-15-17-14-17.png b/Java基础教程/Java集合类/image/2022-12-15-17-14-17.png new file mode 100644 index 0000000000000000000000000000000000000000..9782dbd024bb5b595329a1f3771dace0b1ce0e0f GIT binary patch literal 43974 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Ȝih{2dm|?N+EN!yh22y6CH#;41k*uu1xS!pn7^ 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 Cw8str literal 0 HcmV?d00001 diff --git a/Java基础教程/Java集合类/image/2022-12-15-19-08-34.png b/Java基础教程/Java集合类/image/2022-12-15-19-08-34.png new file mode 100644 index 0000000000000000000000000000000000000000..78e7a8e658756972c8d6649cfcb5efac01a9503c GIT binary patch literal 47432 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