标签:资源 开始 实现 isa 一个 demo 进入 包含 对象
进程的特点:
运行的程序
内存分配的最小单位
每个进程都有自己独立的内存空间和资源
每个进程的内部数据和状态都是完全独立的。
线程:进程中执行运算的最小单位,一个进程中可以包含多个线程,一个线程必须在某个进程内执行
线程的特点:
线程是进程中一个个执行序列
线程是cpu执行的最小单位
线程与进程之间的区别:
相同点:都可以代表程序的执行流,都是整个程序运行的划分单位
区别 | 进程 | 线程 |
---|---|---|
持有的资源不同 | 进程都有自己独立的资源 | 线程共享进程的资源 |
是否可以共享内存空间 | 进程都有自己独立的进程空间,进程之间不能直接访问内存,进程是内存划分的最小单位 | 没有独立的空间,依赖于进程,所有同一进程下的线程,共享内存 |
创建的开销不同 | 进程的创建、销毁、调度的开销大,比较慢 | 线程是轻量级进程,创建、销毁、调度开销小,灵活 |
包括关系不一样 | 进程中至少包含了一个线程,当进程中最后一个线程执行完毕后进程也会结束 | 线程结束,进程不一定会结束 |
可以获得并行执行的效果
提高执行速度
为了用户得到更好的感受
可以把复杂的或长时间执行的代码放在后台执行,让执行的程序有很完美的用户感受
例子:加载10万条数据到用户界面,可以用一个线程从数据库中获取数据,另一个线程进行刷新
每个程序至少必须有一个线程,成为主线程。当程序加载到内存时启动主线程。
在开发中,用户编写的线程一般都是指除了主线程之外的其他线程
定义一个线程,同时指明这个线程所要执行的代码,即期望完成的功能
创建线程对象
启动线程
终止线程
继承java.lang.Thread类
实现Runnable接口
实现Callable接口
利用线程池
Thread中常用的一些方法:
方法 | 说明 |
---|---|
void run() | 执行任务操作的方法 |
void start() | 是该线程开始执行 |
void sleep() | 在指定的毫秒数内让当前正在执行的线程休眠 |
String getName() | 获取当前正在执行的线成名称 |
int getPriority() | 返回线程的优秀级 |
void setPriority(int newPriority) | 更改线程的优先级 |
Thread.state getState() | 返回该线程的状态 |
boolean isAlive() | 测试线程是否处于活动状态 |
void join() | 等待该线程结束 |
void interrupt() | 中断线程 |
void yield() | 暂停当前正在执行的线程对象,并执行其他线程 |
使用继承Thraed类的方式创建线程,在线程中输出1-100的整数
实现步骤如下:
定义一个MyThread类继承Thread类,重写run ()方法,在run()方法中实现数据的输出
创建线程对象
调用start()方法启动线程
在主线程中输出1-100的整数
package com.gcy.thread;
public class MyThread extends Thread {
使用Runnable接口的方式创建线程,在线程输出1-100的整数
代码:
package com.gcy.runnable;
public class MyThread implements Runnable {
线程的声明周期可以分为五个阶段:
开始
就绪状态
执行状态
阻塞状态
死亡
sleep() | yield() |
---|---|
使当前线程进入被阻塞状态 | 将当前线程转入暂停执行的状态 |
即使没有其他等待运行的线程,当前线程也会等待指定的时间 | 如果没有其他等待执行的线程,当前线程会马上恢复执行 |
其他等待线程的机会是均等 的 | 会执行优先级相同或更高的线程 |
当两个线程或多个线程需要访问同一资源时,需要一某种顺序来确保某资源在某一时刻只能被一个线程使用的方式称为线程同步
采用同步来控制线程的方式有两种。即同步方法和同步代码块。这两种方式都使用synchronized关键字来实现。
标签:资源 开始 实现 isa 一个 demo 进入 包含 对象
原文地址:https://www.cnblogs.com/juddy/p/12823380.html