线程的基本认识

线程的基本认识

线程是操作系统能够进行调度的最小运行单位,它被包含在进程中,是进程中的实际运作单位。

线程的基本介绍

为什么会有线程

1.在多核CPU中,利用多线程可以实现真正意义上的并行执行
2.在一个应用进程中,会存在多个同时执行的任务,如果其中一个任务被阻塞,将会使得不依赖该任务的任务也被阻塞,通过对不同任务创建不同线程去处理,可以提升程序处理的实时性。
3.线程可以认为是轻量级的进程,所以线程的创建、销毁比进程快。
一个线程在一个时刻只能运行在一个CPU核心上

线程的应用场景

1)使用多线程实现文件下载
2)后台任务:如定时向大量用户发送邮件
3)异步处理:记录日志
4)多任务的步骤处理:可根据步骤特征选用不同个数和特征的线程来实现多任务的分割,由一个主线程分割给多个线程来完成。

多线程的本质:

合理的利用多核CPU资源来实现线程的并行处理,来实现同一个进程内多个任务的并行执行,同时基于线程本身的异步执行特性,提高任务处理的效率。

如何在java中使用多线程

继承Thread类

public class ThreadDemo extend Thread{
	@Override
	public void run() {
	//线程主体代码
	}
}
//调用:
ThreadDemo demo=new ThreadDemo();
demo.start();//实际上执行的是run()方法

实现Runnable接口

public class runnDemo implements Runnable {
	@Override
	public void run() {
	//线程主体代码
	}
}
//调用:runnDemo实现的接口没有start方法,需要Thread来调用
ThreadDemo demo=new ThreadDemo(runnDemo );
demo.start();//实际上执行的是run()方法

实现Callable接口

特点
1.有返回值

public class CallableDemo implements Callable<String> {
//Callable<V>中的泛型,定义了返回值的类型
    @Override
    public String call() throws Exception {
        return null;
    }
}

2.需要用线程池/线程进行调用

public static void main(String[] args) throws ExecutionException, InterruptedException {
//方法一
         ExecutorService executorService = Executors.newFixedThreadPool(1);
         Future<CallableDemo> future = executorService.submit(CallableDemo::new);
         future.get();//返回值
//方法二
        FutureTask futureTask=new FutureTask(CallableDemo::new);
        new Thread(futureTask).start();
        futureTask.get();//返回值
    }

注意,get()是一个阻塞方法,如果call()里不返回结果,get()会一直阻塞,直到获取到返回值

线程的生命周期

JAVA线程从创建到销毁,一共可能会经历的六种状态:
NEW :初始状态,线程被构建,但是还没有调用start方法
RUNNABLED :运行状态,JAVA线程把操作系统中的就绪和运行两种状态统一称为“运行中”(线程的真正运行涉及到OS调度)
BLOCKED :阻塞状态,表示线程进入等待状态,也就是线程因为某种原因放弃了CPU使用权。阻塞也分为几种清理
WATING :等待状态
TIME_WAITING :超时等待状态,超时以后自动返回
TERMINATED :终止状态,表示当前线程执行完毕
相关命令
jps
jps 是 Java Process Status Tool 的简称,它的作用是为了列出所有正在运行中的 Java 虚拟机进程
每一个 Java 程序在启动的时候都会为之创建一个 Jvm 实例,通过 jps 可以查看这些进程的相关信息
jstack
1.用于打印指定Java进程、核心文件或远程调试服务器的Java线程的Java堆栈跟踪信息
2.可以生成JVM当前时刻的线程快照。线程快照是当前JVM内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值