java多线程新特性

简介: java多线程新特性

Java的线程池分好多种:



固定尺寸的线程池、单任务线程池、 可变尺寸连接池、延迟连接池、单任务延迟连接池、自定义线程池


固定大小的线程池



image.png


Thread thread = new Thread(() -> {
            System.out.println(123);
        });
ExecutorService threadPool = Executors.newFixedThreadPool(10);
threadPool.execute(thread);
threadPool.shutdown();


  1. 线程池中,线程用完后是要全部回收的,再用要重新分配。


  1. 完成了对线程对象的重用,避免了重复创建线程对象造成的资源浪费


  1. 关闭线程池后,不可以再添加新的线程到池当中,再加就会报错


单任务线程池



image.png


可变尺寸的线程池



image.png



延迟线程池



image.png


  1. 当当前线程池资源****被占用****,延迟线程顺延排队执行


       b.如果资源没有被占用,则加入到批次中


       c.延迟线程一样需要竞争资源


单任务延迟线程池



image.png


自定义线程池



image.png


image.png


三者之间的关系:


1.如果没有空闲的线程执行该任务且当前运行的线程数少于corePoolSize,则添加新的线程执行该任务。


2.如果没有空闲的线程执行该任务且当前的线程数等于corePoolSize同时workQueue未满,则将任务入workQueue,而不添加新的线程。


3.如果没有空闲的线程执行该任务且workQueue已满同时池中的线程数小于maximumPoolSize,则创建新的线程执行任务。


4.如果没有空闲的线程执行该任务且workQueue已满同时池中的线程数等于maximumPoolSize,则根据构造函数中的handler指定的策略来拒绝新的任务。


有返回值的线程



image.png


1.实现了Callable接口


2.任何线程必须join到Callable之后才会执行


3.应用场景:当当前线程需要前一个线程的执行结果,才能继续执行时,需要get()结果


4.如果不需要返回值,则其和普通线程没有任何区别


线程池-锁



image.png


读写锁:


1.场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。


2.三种特性:


1.选择性:支持非公平(默认)和公平的锁获取方式,吞吐量还是非公平优于公平。


2.重进入:读锁和写锁都支持线程重进入。


3.锁降级:遵循获取写锁、获取读锁再释放写锁的次序,写锁能够降级成为读锁。


image.png


线程池-信号量:



image.png


Semaphore semaphore = new Semaphore(10);
semaphore.acquire(1);
semaphore.release(1);


image.png


线程池-阻塞队列:



image.png


image.png



线程池-阻塞栈:



image.png


image.pngimage.png


image.pngimage.png


条件变量:条件变量是针对锁的调度



image.png


class A {
    private Lock lock = new ReentrantLock();
    Condition c1 = lock.newCondition();
    void test1() throws InterruptedException {
        lock.lock();
        System.out.println("等待开始");
        c1.await();
        System.out.println("等待结束");
        lock.unlock();
    }
    void test2() {
        lock.lock();
        c1.notifyAll();
        System.out.println("已唤醒");
        lock.unlock();
    }
}


1.在持锁的情况下,可以等待和唤醒


2.可以实现多对象同时唤醒


原子量:所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。




image.png


1.AtomicInteger原子量常用方法:


image.png


2.AtomicIntegerArray原子量常用方法


image.png


  1. 即便是原子量,依然要做线程同步


  1. 保证多个线程对同一个数据的可见性和线程安全性


障碍器:



image.png


image.png

目录
相关文章
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
135 2
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
156 1
|
2月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
2月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java API 开发者
97 0
Java 数据库 Spring
134 0
|
2月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
217 16
|
3月前
|
缓存 并行计算 安全
关于Java多线程详解
本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。
|
3月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
4月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
217 1