多线程进阶 JUC并发编程

简介: 多线程进阶 JUC并发编程
  1. 什么是JUC

JUC是java.util.concurrent包的简称,在Java5.0添加,目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题

runable和callable相比,下路低,且没有返回值,一般使用callable情况多些,但是特殊的业务不是能普通的线程去解决,这就需要使用juc的相关知识

我们经常使用的callable,lock接口 都属于juc(java.util.concurrent)下的

  1. 准备编写代码环境
  2. 创建一个maven项目

image.png


  1. pom.xml引入lombok
<dependencies>
<!--lombok依赖-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version>
    </dependency>
</dependencies>


确保项目使用的是jdk1.8版本,如果不是1.8版本,lambda表达式和jdk新特性是用不了的


image.png

image.png


image.png

有了这些准备,就可以正常编写代码


线程和进程


image.png


现在写笔记,打字,自动保存,都是进程里面的线程

Java一般使用callable runnable,thread这三种方式去开启线程

Java默认有几个线程?

2个  mian线程,gc(垃圾回收)线程

Java真的可以开启线程吗

不可以的

查看start()源码可以发现  调用的是本地方法 然后调用底层的c++ java无法直接操作硬件


public synchronized void start() {
/**
     * This method is not invoked for the main method thread or "system"
     * group threads created/set up by the VM. Any new functionality added
     * to this method in the future may have to also be added to the VM.
     *
     * A zero status value corresponds to state "NEW".
     */
    if (threadStatus != 0)
throw new IllegalThreadStateException();
/* Notify the group that this thread is about to be started
     * so that it can be added to the group's list of threads
     * and the group's unstarted count can be decremented. */
    group.add(this);
boolean started = false;
try {
        start0();
        started = true;
    } finally {
try {
if (!started) {
group.threadStartFailed(this);
            }
        } catch (Throwable ignore) {
/* do nothing. If start0 threw a Throwable then
              it will be passed up the call stack */
        }
    }
}
//本地方法 调用底层的c++ java无法直接操作硬件
private native void start0();


目录
相关文章
|
11天前
|
Java
并发编程的艺术:Java线程与锁机制探索
【6月更文挑战第21天】**并发编程的艺术:Java线程与锁机制探索** 在多核时代,掌握并发编程至关重要。本文探讨Java中线程创建(`Thread`或`Runnable`)、线程同步(`synchronized`关键字与`Lock`接口)及线程池(`ExecutorService`)的使用。同时,警惕并发问题,如死锁和饥饿,遵循最佳实践以确保应用的高效和健壮。
25 2
|
18天前
|
并行计算 Python
Python中的并发编程(2)线程的实现
Python中的并发编程(2)线程的实现
Python中的并发编程(2)线程的实现
|
2天前
|
数据采集 算法 数据处理
Python并发编程:异步IO与多线程的比较与应用
本文探讨了Python中异步IO和多线程两种并发编程模型的优劣及其在实际应用中的适用性。通过比较它们在性能、资源消耗和代码复杂度等方面的差异,分析了不同场景下选择合适的并发模型的策略和方法。
|
6天前
|
存储 设计模式 安全
C++一分钟之-并发编程基础:线程与std::thread
【6月更文挑战第26天】C++11的`std::thread`简化了多线程编程,允许并发执行任务以提升效率。文中介绍了创建线程的基本方法,包括使用函数和lambda表达式,并强调了数据竞争、线程生命周期管理及异常安全等关键问题。通过示例展示了如何用互斥锁避免数据竞争,还提及了线程属性定制、线程局部存储和同步工具。理解并发编程的挑战与解决方案是提升程序性能的关键。
26 3
|
15天前
|
数据挖掘 调度 开发者
Python并发编程的艺术:掌握线程、进程与协程的同步技巧
并发编程在Python中涵盖线程、进程和协程,用于优化IO操作和响应速度。`threading`模块支持线程,`multiprocessing`处理进程,而`asyncio`则用于协程。线程通过Lock和Condition Objects同步,进程使用Queue和Pipe通信。协程利用异步事件循环避免上下文切换。了解并发模型及同步技术是提升Python应用性能的关键。
38 5
|
18天前
|
Java Python
Python中的并发编程(3)线程池、锁
Python中的并发编程(3)线程池、锁
|
18天前
|
存储 安全 Java
Java多线程编程--JUC
Java多线程编程
|
18天前
|
存储 JSON 算法
Python中的并发编程(4)多线程发送网络请求
Python中的并发编程(4)多线程发送网络请求
|
20天前
|
Python
并发编程,Python让你轻松驾驭多线程与异步IO!
【6月更文挑战第12天】本文探讨了Python中的并发编程,包括多线程和异步IO。通过`threading`模块展示了多线程编程,创建并运行多个线程以并发执行任务。同时,使用`asyncio`库演示了异步IO编程,允许在单线程中高效处理多个IO操作。两个示例代码详细解释了如何在Python中实现并发,展现了其在提升程序性能和响应速度方面的潜力。
|
6天前
|
缓存 并行计算 安全
【并发编程系列一】并发编年史:线程的双刃剑——从优势到风险的全面解析
【并发编程系列一】并发编年史:线程的双刃剑——从优势到风险的全面解析