认识线程
1.进程:
进程(Process)是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个过程,这个过程也是进程本身从产生、发展至消亡的过程。 操作系统同时管理一个计算机系统中的多个进程,让计算机系统中的多个进程轮流使用CPU资源,或者共享操作系统的其他资源。
进程有如下特点:
·进程是系统运行程序的基本单位。
·每一个进程都有自己独立的一块内存空间、一组系统资源。
·每一个进程的内部数据和状态都是完全独立的。
2.线程:(核心级线程--------用户级线程)
线程是进程中执行运算的最小单位,一个进程在其执行过程中可以产生多个线程,而线程必须在某个进程内执行。
线程是进程内部的一个执行单元,是可完成一个独立任务的顺序控制流程,如果在一个进程中同时运行多个线程,用来完成不同的工作,则称之为多线程。
线程的五个状态: 创建、就绪、阻塞、运行、死亡
线程调度的方法:
setPriorirty(int grade) 设置线程优先级
sleep(long millis) 线程的休眠(静态方法)
Join() 线程的强制执行
yield() 线程的礼让(仅仅只是礼让的可能)
线程和进程的联系与区别:
->一个进程中至少要有一个线程。
->资源分配给进程,同一进程的所有线程共享该进程的所有资源。
->处理机分配给线程,即真正在处理机上运行的是线程。
3.多线程的优势
->充分利用CPU的资源。
->简化编程模型。
->带来更好的用户体验。
主线程
->main()方法即为主线程入口
->产生其他子线程的线程
->必须最后完成执行,因为它执行各种关闭动作
public static void main(String args[]) {
Thread t= Thread.currentThread(); ---------------->获得主线程对象
System.out.println("当前线程是: "+t.getName());
t.setName("MyJavaThread"); ----------------------->设置线程名
System.out.println("当前线程名是: "+t.getName()); -------------->获取线程名
在java中创建线程的两种方式
继承java.lang.Thread类
实现java.lang.Runnable接口
使用线程的步骤
1.定义线程-》2.创建线程对象-》3.启动线程-》4.终止线程
线程池所在包java.util.concurrent.
顶级接口时Executor,真正的线程池接口时ExecutorService.
java.util.concurrent.Executors类提供创建线程池的方法。
newCachedThreadPool():创建一个可缓存的线程池,有任务时才创建新任务。
newSingleThreadExecutor():创建一个单线程池。
newFixedThreadPool(int n Threads):创建一个固定长度的线程池,空闲线程会一只保留。参数nThread设定线程池中线程的数目。
newScheduledThreadPool(int corePoolSize):创建了一个固定长度的线程池,而且以延迟或定时的方式来执行任务。
线程调度指按照特定机制为多个线程分配CPU的使用权
setPriority(int newPriority) 更改线程的优先级
static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠
void join() 等待该线程终止
static void yield() 暂停当前正在执行的线程对象,并执行其他线程
void interrupt() 中断线程
boolean isAlive() 测试线程是否处于活动状态