Java 知识点

embedded/2024/10/22 13:29:26/
  1. 遍历list列表,两种常用的
java"> List<String> list = new ArrayList<>();list.add("123");list.add("12334");for (String a: list) {System.out.println(a);}list.forEach(str -> {System.out.println("1" + str);});

2 . lambda 表达式,本质 匿名函数
将接口类型和参数类型都省略

java">new Thread(new Runnable(){// 接口名@Overridepublic void run(){// 方法名System.out.println("Thread run()");}
}).start();

lambda实现

java">new Thread(() -> System.out.println("Thread run()")// 省略接口名和方法名
).start();

可参照: https://blog.csdn.net/2302_79993788/article/details/140107278

3.HashMap类型定义及遍历
个人不喜欢使用iterator进行遍历

lambda方式

java">HashMap<String, String> hash = new HashMap<>();hash.put("1", "a");hash.put("2", "b");hash.put("3", "c");hash.forEach((key, value) -> {System.out.println(key);});

entrySet keySet

java"> for(Map.Entry<String, String> a:hash.entrySet()) {System.out.println(a.getKey());System.out.println(a.getValue());}

可参照:https://www.jb51.net/program/314396aog.htm

4.线程创建的几种方式
基于thread

java">class MyThread extends Thread{@Overridepublic void run() {while(true){System.out.println("Hello t");}}}public class ThreadDemo1 {public static void main(String[] args) {Thread t=new MyThread();//start会创建新的线程t.start();//run不会创建新的线程,run是在main的线程中执行的while(true){System.out.println("Hello main");}}
}

重写Runnable,作为thread参数

java">class MyRunnable implements Runnable{@Overridepublic void run() {while(true){System.out.println("Hello t");try {Thread.sleep(1000);} catch (InterruptedException e) {//sleep睡眠过程中就将其打断// throw new RuntimeException(e);e.printStackTrace();}}}
}
public class ThreadDemo2 {public static void main(String[] args) {MyRunnable runnable=new MyRunnable();Thread t=new Thread(runnable);t.start();while(true){System.out.println("Hello main");try {Thread.sleep(1000);} catch (InterruptedException e) {//sleep睡眠过程中就将其打断// throw new RuntimeException(e);e.printStackTrace();}}}}

可以转换为lambda写法

java"> Thread t=new Thread(() -> {while(true){System.out.println("Hello t");try {Thread.sleep(1000);} catch (InterruptedException e) {//sleep睡眠过程中就将其打断// throw new RuntimeException(e);e.printStackTrace();}}});

5.队列创建

java">BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(3); // 创建一个容量为3的BlockingQueue// 添加元素queue.put(1);queue.put(2);queue.put(3);// 队列满时,添加操作将阻塞// queue.put(4); // 这里会阻塞// 从队列取元素int element1 = queue.take();System.out.println(element1); // 输出: 1// 队列为空时,取元素操作将阻塞// int element2 = queue.take(); // 这里会阻塞// 添加元素,不会阻塞,因为队列还有容量queue.offer(4);// 显示队列中的元素while (!queue.isEmpty()) {System.out.println(queue.take()); // 输出: 2, 3, 4}

在这里插入图片描述
6.线程池

newFixedThreadPool: 创建一个固定大小的线程池,适用于控制最大并发数的场景,如果超出了那么就会在队列中等待。

newSingleThreadExecutor: 创建一个单线程化的线程池,只会有一个线程,用于保证所有任务按照指定顺序(FIFO,
LIFO, 优先级)执行的场景。

newScheduledThreadPool: 创建一个定时线程池,用于定时及周期性任务执行的场景。

newCachedThreadPool:
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,否则新建线程;适用于执行大量短期异步任务的场景。

核心是调用ThreadPoolExecutor创建线程池

调用方式:

java"> //创建含有5个线程的线程池ExecutorService threadPool = Executors.newFixedThreadPool(5);//提交5个任务到线程池中for (int i = 0; i < 5; i++) {final int taskNo = i;threadPool.execute(() -> {System.out.println("执行任务:"+taskNo);});}//关闭线程池threadPool.shutdown();//如果线程池还没达到Terminated状态,说明线程池中还有任务没有执行完while (!threadPool.isTerminated()) {}

需要返回结果的,相当于串行调用

java"> ExecutorService threadPool = Executors.newFixedThreadPool(3);for (int i = 0; i < 5; i++) {final int taskNo = i;Future<Integer> future = threadPool.submit(() -> {System.out.println("执行任务:"+taskNo);return taskNo;});System.out.println("处理结果:"+future.get());}//关闭线程池threadPool.shutdown();//如果线程池还没达到Terminated状态while (!threadPool.isTerminated()) {}

自定义拒绝策略

java">public class CustomRejectionPolicy implements RejectedExecutionHandler {@Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {// 在这里定义你的自定义处理逻辑System.out.println("Task " + r.toString() + " was rejected");// 可以选择记录日志、抛出异常、使用备用线程池执行等}public static void main(String[] args) {ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 2, 0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>(2),new CustomRejectionPolicy());// 提交任务...}
}

可参照: https://blog.csdn.net/who_im_i/article/details/140081175.
可参照:https://blog.csdn.net/qq_47183158/article/details/140931384

7.泛型

java">  T :代表一般的任何类。E :代表 Element 元素的意思,或者 Exception 异常的意思。K :代表 Key 的意思。V :代表 Value 的意思,通常与 K 一起配合使用。S :代表 Subtype 的意思,文章后面部分会讲解示意。

泛型可应用于:接口、类、方法前 进行修饰


http://www.ppmy.cn/embedded/129567.html

相关文章

cinder组件

cinder&#xff1a;提供云硬盘功能&#xff08;持久化块存储&#xff09; 1.如果环境中对接多个存储&#xff0c;用户可以指定存储空间来源 1.1搭NAS存储 1.1.1配置存储节点-管理接口 1.1.2配置存储节点-业务接口&#xff08;二层网络不需要配网关&#xff09; 1.1.3引申-系统…

C++面向对象编程学习

C面向对象编程学习 前言一、C面向对象编程二、知识点学习1. 定义一个类1.1 使用struct定义1.2 使用class定义1.3 struct和class的区别 2. 类的定义方式2.1 单文件定义&#xff08;Inline Definition&#xff09;2.2 分离定义&#xff08;Separate Definition&#xff09;2.3 头…

CSSfilter实现磨砂效果

以往我们实现磨砂效果一般是用背景透明度和阴影来实现的&#xff0c;但这种效果给人看起来比较僵硬&#xff0c;也无法更加灵活的变更效果。 如今&#xff0c;filter属性可以实现磨砂效果&#xff0c;案例如下 <!DOCTYPE html> <html lang"en"><hea…

【力扣 | SQL题 | 每日3题】力扣1097,1149,1070

1hard 2 mid&#xff0c;难度还行&#xff0c;当做练手。 1. 力扣1097&#xff1a;游戏玩法分析5 1.1 题目&#xff1a; 表&#xff1a;Activity ----------------------- | Column Name | Type | ----------------------- | player_id | int | | device_id …

线性代数 行列式

一、行列式 1、定义 一个数学概念&#xff0c;主要用于 线性代数中&#xff0c;它是一个可以从方阵&#xff08;即行数和列数相等的矩阵&#xff09;形成的一个标量&#xff08;即一个单一的数值&#xff09; 2、二阶行列式 &#xff0c;像这样将一个式子收缩称为一个 2*2 的…

异地多活架构

一、异地多活简介 异地多活是一种高可用性部署策略&#xff0c;旨在通过在地理上分散的多个数据中心部署应用和数据&#xff0c;来提高系统的可用性和灾难恢复能力。这种策略能够确保在一个或多个数据中心发生故障时&#xff0c;系统仍然能够继续提供服务&#xff0c;从而最大…

基于微信小程序的购物系统【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

什么是 HTML 语义化?

HTML 语义化是指根据内容的结构和含义&#xff08;内容语义化&#xff09;&#xff0c;选择合适的 HTML 标签&#xff08;代码语义化&#xff09;&#xff0c;以更好地表达内容的意义和层次。通俗来讲&#xff0c;就是用正确的标签做正确的事情。 优点 1&#xff09;对机器友好…