一:前言
多线程在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;}@Overridepublic 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;}@Overridepublic void run() {System.out.println("当前姓名:"+name+",age="+age);}
}public class ReaddingCallable implements Callable<String> {@Overridepublic 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();}
2.线程的生命周期
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);
4:如何优雅停止线程
在Java中优雅地停止线程通常意味着让线程自愿停止执行,而不是使用强制(例如Thread.stop())方法。
class GracefulStoppable extends Thread {private volatile boolean running = true;@Overridepublic 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(); // 等待线程终止}
}