JAVA多线程

前言

之前学习做的笔记都在印象笔记了,现在整理有点麻烦,需要的点击链接看吧。

https://app.yinxiang.com/fx/12e297a5-a584-4bc6-a362-79cb8e41b5ff

一、进程和线程概述:进程是指程序的一次运行过程,线程是进程的一个执行单元,进程是资源分配的基本单位,线程是任务处理的调度单位,既cpu执行的单位。进程间资源独立,线程间资源共享(堆,方法区),进程切换需要保存并恢复进程状态,开销较大,线程切换开销小。常用于将工作拆分处理。

1.进程和线程

进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多  个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创  建、运行到消亡的过程。

线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程  中是可以有多个线程的,这个应用程序也可以称之为多线程程序。(进程线程的概念—面试题/笔试题的简答题)

注:线程可以分为主线程和子线程,主线程退出则子线程也跟着退出,除非子线程能够单独的关闭; 比如说mian函数就是一个主线程,被Thread包含的“方法体”或者“委托”均为子线程,通过调用start方法告诉操作系统可以调度子线程了

 

补充:线程的分类,一种是守护线程:是用来服务用户线程的,通过在start()方法前调用 thread.setDaemon(true)可以把一个用户线程变成一个守护线程,Java垃圾回收就是一个典型的守护线程。另一种是用户线程,用户创建的线程。

2.线程的作用:实现同步或异步执行多个任务,增加cpu的使用效率

(1)并发与并行

并发: 同时执行两个或两个以上的任务既线程。需要不断切换CPU轮流执行任务,以达到同时执行的效果。一般指发生在单核处理器CPU。比如多个用户同时发起请求,从用户角度来看是同时执行的,实际上是CPU轮流执行。

并行: 同时执行多个任务 ,同一时刻发生(同时发生)一般出现在多核CPU上。cpu每个核单独处理一个任务,核与核间同时执行,称为并行。

 

注:cpu有多核处理器和单核处理器,每个核心可独立运行指令集。单核处理器只能处理一个指令。

创建方式

继承Thread类、实现runnable接口,并重写run()方法。调用start方法开启线程;或实现callable接口,重写call方法。

1.继承Thread类

构造方法

Thread():创建新的Thread对象

Thread(String threadname):创建线程并指定线程实例名 

Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接 口中的run方法 

Thread(Runnable target, String name):创建新的Thread对象

Thread常用方法

void start(): 启动线程,并执行对象的run()方法

run(): 线程在被调度时执行的操作 

String getName(): 返回线程的名称

void setName(String name):设置该线程名称 

static Thread currentThread(): 返回当前线程。在Thread子类中就 是this,通常用于主线程和Runnable实现类

static void yield():线程让步,暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程 若队列中没有同优先级的线程,忽略此方法 

join() :当某个程序执行流中调用其他线程的 join() 方法时,调用线程将被阻塞,直到 join() 方法加入的 join 线程执行完为止,低优先级的线程也可以获得执行 

static void sleep(long millis):(指定时间:毫秒) 令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后 重排队,抛出InterruptedException异常

 stop(): 强制线程生命期结束,不推荐使用 

boolean isAlive():返回boolean,判断线程是否还活着

 

实现步骤:

1) 定义子类继承Thread类。

 2) 子类中重写Thread类中的run方法。 

3) 创建Thread子类对象,即创建了线程对象。 

4) 调用线程对象start方法启动线程,线程会调用run方法。

2.实现Runnable接口

步骤:

1) 定义子类,实现Runnable接口。

 2) 子类中重写Runnable接口中的run方法。 

3) 通过Thread类含参构造器创建线程对象。

 4) 将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。

 5) 调用Thread类的start方法开启线程,线程调用Runnable子类接口的run方法。

3.实现Callable接口

步骤:与runnable类似

注:

 继承Thread类:线程代码存放Thread子类run方法中,只能单继承。 

 实现Runnable接口:线程代码存在接口的子类的run方法,接口避免了单继承的局限性。

 实现callable接口:线程代码存在接口的子类的call方法,接口避免了单继承的局限性,且有返回值,可判断是否执行完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值