多线程扫盲篇

一:前言

多线程在java中具有举足轻重的地位,无论是平时开发中还是面试求职中,对多线程这一块的知识点考察都非常多的,本周我们将平时开发中、面试中常见的一些多线程知识进行梳理,让大家对这一块有更加深入的理解

二:多线程应用场景

2.1:多线程的定义

多线程是指在一个程序中同时运行多个线程,每个线程都是独立的执行流程,可以在同一时间内执行不同的任务,从而提高程序的并发性和效率。

2.2:多线程应用场景

1:后台任务,比如定时推送1000W+短信

2:异步计算,如发微博、记录日志、耗时计算

3:分布式计算,通过多线程实现分布在不同机器上的任务协同工作。

4:数据分析:对于大数据集的分析,由于单线程处理可能太慢,因此可能需要使用多线程来加速这个过程。

5:多步骤的任务处理:根据任务的不同阶段和特性,使用多线程来协调不同的任务流程。

2.3:多线程的意义

1:提高效率:通过多线程可以把任务分解成多个,每个线程之间互不干扰,提高整体效率

2:提高并发性和响应能力:Java多线程允许程序在同一时间执行多个任务,可以充分利用计算机的多核处理器,提高程序的性能和响应速度。

三:多线程的技术应用

3.1 java中的基础实现

通过继承Thread类或者实现Runnable接口实现多线程,案例代码如下

public class ReadingThread extends Thread{

    private String name;
    private Integer age;

    public ReadingThread(String name,Integer age){
        this.name=name;
        this.age=age;
    }

    @Override
    public void run() {
        System.out.println("当前姓名:"+name+",age="+age);
    }
}

public class ReadingThread extends Thread{

    private String name;
    private Integer age;

    public ReadingThread(String name,Integer age){
        this.name=name;
        this.age=age;
    }

    @Override
    public void run() {
        System.out.println("当前姓名:"+name+",age="+age);
    }
}

public class ReaddingCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        return null;
    }
}

    public static void main(String[] args) {
        System.out.println(1<<30);
        ReadingThread thread=new ReadingThread("aa",100);
        thread.start();
        Thread.currentThread().setPriority(1);

        ReaddingRunnable readdingRunnable=new ReaddingRunnable("cc",200);
        Thread thread2=new Thread(readdingRunnable);
        thread2.start();
    
  ReaddingCallable callable=new ReaddingCallable();
        FutureTask futureTask=new FutureTask(callable);
        Thread thread3=new Thread(futureTask);
        thread3.start();
        Object result = futureTask.get();
    }

3.2.线程的生命周期

3.3:线程中的常用的函数说明

 Thread thread8=new Thread();
        //启动一个线程,
        thread8.start();
        //执行当前线程,并不会新开线程
        thread8.run();
        //java线程优先级设置 范围在1-10 1为最低 10为最高,默认创建是5,
        // cpu会按照优先级进行分配资源
        thread8.setPriority(5);
        //当前线程加入等待,等当前线程执行完毕,在执行主线程
        thread8.join();
        //设置中断状态,设置为已中断
        thread8.interrupt();
        //获取中断状态
        thread8.isInterrupted();
        //恢复中断状态
        Thread.interrupted();
        //如何优雅停止线程?一种常见的方法是使用中断机制
        Thread.sleep(100);

3.4:如何优雅停止线程

在Java中优雅地停止线程通常意味着让线程自愿停止执行,而不是使用强制(例如Thread.stop())方法。
class GracefulStoppable extends Thread {
    private volatile boolean running = true;
 
    @Override
    public void run() {
        while (running) {
            // 执行任务
            // ...
 
            // 检查是否有中断请求
            if (Thread.currentThread().isInterrupted()) {
                // 清理资源或执行停止逻辑
                // ...
                break;
            }
        }
    }
 
    public void stopGracefully() {
        running = false;
        interrupt(); // 触发中断状态
    }
}
 
public class Main {
    public static void main(String[] args) throws InterruptedException {
        GracefulStoppable thread = new GracefulStoppable();
        thread.start();
 
        // 执行其他操作...
 
        // 当需要优雅停止线程时
        thread.stopGracefully();
        thread.join(); // 等待线程终止
    }
}

3.5:线程安全

线程安全是编程中的术语,指某个函数、函数库在并发环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。

详细参考:详解什么是线程安全?-CSDN博客

3.6:并发集合

1:ConcurrentHashMap原理解析

深入解析ConcurrentHashMap:感受并发编程智慧 - 掘金

2:CopyOnWriteArrayList原理解析

CopyOnWriterArrayList 详解_copyonwritearraylist-CSDN博客

3:ConcurrentLinkedQueue原理解析

https://www.cnblogs.com/kukuxjx/p/18012960

4:ConcurrentSkipListSet原理解析

Java并发基础:ConcurrentSkipListSet全面解析!_java concurrentskiplistset-CSDN博客

5:ConcurrentSkipListMap原理解析

ConcurrentSkipListMap-CSDN博客

6:BlockingDeque接口的实现类

BlockingDeque 双端队列 - 简书

3.7:countdownlatch和cyclicbarrier原理

countdownlatch和cyclicbarrier原理详解-CSDN博客

3.8:complatefuture原理解析

CompletableFuture实现异步编排全面分析和总结 - 知乎

3.9: 线程池

3.10:在谈线程安全锁机制

四:多线程引申过来的知识点解析

五:多线程中的最佳实践

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值