线程与进程
进程是一个独立的应用程序
进程是所有线程的集合
线程是一条执行路径,每个线程都互不影响
多线程在一个进程中,有多条不同的执行路径,并行执行,提高程序效率
多线程应用场景
软件的多线程下载,数据库连接池,分批发送短信
多线程创建方式
线程几种分类:用户线程、守护线程 主线程 子线程 GC线程
同步与异步
同步:代码从上往下执行,顺序执行
异步:新的一条执行路径,不会影响其他线程
第一种:继承Thread类
继承Thread类、重写run方法、run方法里面写线程执行代码
class Threaddemo extends Thread{
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println("i:"+i);
}
}
}
public class Test001 {
public static void main(String[] args) {
//创建对象
Threaddemo thread01 =new Threaddemo();
//启动线程
thread01.start();
}
}
第二种:实现Runnable接口
实现Runnable接口 重写run方法
class ThreadDemo02 implements Runnable{
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println("i:"+i);
}
}
}
public class Test002 {
public static void main(String[] args) {
//把Runnable对象放进Thread构造方法中
Thread thread = new Thread(new ThreadDemo02());
thread.start();
}
}
使用匿名内部类
public static void main(String[] args) {
//使用匿名内部类创建线程
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println("i:"+i);
}
}
}).start();
}
线程五种状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jp1M7Lqv-1629880452118)(https://note.youdao.com/yws/public/resource/f1f10af6011bd9db12bd8d1916fa8668/02E6E5FB9CAF4DF1AC7FB10FE8065107?ynotemdtimestamp=1629879558654)]
守护线程与非守护线程
守护线程 :
和main相关,如果主线程停止,不会影响用户线程
非守护线程:和主线程互不影响,是用户线程
join方法
线程A线程B会同时互相进行
线程A使用join方法后,线程B会让线程A执行完再执行