并发编程专题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发编程专题相关的知识,希望对你有一定的参考价值。
进程和线程概念
进程:资源分配的基本单位。
线程:独立调度的基本单位,一个进程中可以包含多个线程,它们之间共享进程资源,同一进程中线程切换不会引发进程切换,不同进程中的线程切换会引发进程切换。
为什么要使用多线程?
多线程的是指在同一时刻有多条执行路径,目的是为了提高程序的运行效率。
多线程应用场景:
多线程下载、数据库连接池、分批发送短信等。
多线程的创建方式
继承 Thread(不建议使用,因为 Java 支持多继承)
class ThreadDemo1 extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i);
}
}
public static void main(String[] args) throws InterruptedException {
ThreadDemo1 threadDemo1 = new ThreadDemo1();
threadDemo1.start();
}
}
实现 Runable 接口
public class ThreadDemo2 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i);
}
}
public static void main(String[] args) {
ThreadDemo1 threadDemo1 = new ThreadDemo1();
new Thread(threadDemo1).start();
}
}
使用匿名内部类
public class ThreadDemo3 {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.start();
}
}
常用线程 API 方法:
- start() 启动线程
- currentThread() 获取当前线程对象
- getID() 获取当前线程ID,Thread-编号,该编号从0开始
- getName() 获取当前线程名称
- sleep(long mill) 休眠线程
- stop() 停止线程
常用线程构造函数
- Thread() 分配一个新的 Thread 对象
- Thread(String name) 分配一个新的 Thread对象,具有指定的 name正如其名。
- Thread(Runable r) 分配一个新的 Thread对象
- Thread(Runable r, String name) 分配一个新的 Thread对象
多线程状态
守护线程和非守护线程
守护线程:和主线程相关,跟随主线的消亡而消亡,GC(回收主线程垃圾的线程) 线程就是一个典型的守护线程
非守护线程:用户线程(用户创建的线程)跟主线程无关,主线程销毁后,用户线程继续执行,可以通过 setDaemon(true) 将一个非守护线程声明成守护线程
线程让步
join()
当一个线程调用了 join 方法,其他线程要让权给该线程,让这个线程先执行
setPriority()
通过一个整型数控制优先级,优先级用 1~10,1的优先级最低,默认为5,只能表示紧急程度,能不能抢到资源不一定
Thread.yield()
当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行,注意是让自己或者其他线程运行,并不是单纯的让给其他线程
同步和异步概念
单线程:代码从上往下执行,顺序执行
同步:代码从上往下执行
异步:新的一条执行路径,不会影响其他线程
以上是关于并发编程专题的主要内容,如果未能解决你的问题,请参考以下文章
Java并发编程专题系列之深入分析synchronized(基础篇)
全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段