没有合适的资源?快使用搜索试试~ 我知道了~
Java多线程编程的Java中的线程.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 35 浏览量
2022-07-02
22:20:40
上传
评论
收藏 613KB DOCX 举报
温馨提示
试读
11页
程序、进程和线程 程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码。它本身没有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,也有可能是经过编译之后生成的可执行文件。 从狭义来说,进程是正在运行的程序的实例;从广义上来说,进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。进程是操作系统进行资源分配的基本单位。 线程是进程中可独立执行的最小单位,它也是处理器进行独立调度和分派的基本单位。一个进程可以包含多个线程,每个线程执行自己的任务,同一个进程中的所有线程共享该进程中的资源,如内存空间、文件句柄等。
资源推荐
资源详情
资源评论
Java 多线程编程的 Java 中的线程
一.程序、进程和线程
程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码。它本身没
有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,
也有可能是经过编译之后生成的可执行文件。
从狭义来说,进程是正在运行的程序的实例;从广义上来说,进程是一个具有
一定独立功能的程序关于某个数据集合的一次运行活动。进程是操作系统进行
资源分配的基本单位。
线程是进程中可独立执行的最小单位,它也是处理器进行独立调度和分派的基
本单位。一个进程可以包含多个线程,每个线程执行自己的任务,同一个进程
中的所有线程共享该进程中的资源,如内存空间、文件句柄等。
二.多线程编程简介
什么是多线程编程
多线程编程技术是 Java 语言的重要特点。多线程编程的含义是将程序任务分成
几个并行的子任务,并将这些子任务交给多个线程去执行。
多线程编程就是以线程为基本抽象单位的一种编程范式。但是,多线程编程又
不仅仅是使用多个线程进行编程那么简单,其自身又有需要解决的问题。多线
程编程和面向对象编程是可以相容的,即我们可以在面向对象编程的基础上实
现多线程编程。事实上,Java 平台中的一个线程就是一个对象。
为什么要使用多线程编程
现在的计算机动辄就是多处理器核心的,而每一个线程同一时间只能运行在一
个处理器上。如果只采用单线程进行开发,那么就不能充分利用多核处理器的
资源来提高程序的执行效率。而使用多线程进行编程时,不同的线程可以运行
在不同的处理器上。这样一来,不仅大大提高了对计算机资源的利用率,同时
也提高了程序的执行效率。
三.Java 线程 API 简介
java.lang.Thread 类就是 Java 平台对线程的实现。Thread 类或其子类的一个实
例就是一个线程。
1.线程的创建、启动和运行
在 Java 平台中,创建一个线程就是创建一个 Thread 类(或其子类)的示例。
每个线程都有其要执行的任务。线程的任务处理逻辑可以在 Thread 类的 run 方
法中直接实现或者通过该方法进行调用,因此 run 方法相当于线程的任务处理
逻辑的入口方法,它应该由 Java 虚拟机在运行相应线程时直接调用,而不应该
由应用代码进行调用。
运行一个线程实际上就是让 Java 虚拟机执行该线程的 run 方法,从而使任务处
理逻辑代码得以执行。如果一个线程没有启动,它的 run 方法是绝对不会被执
行的。为此,首先需要启动线程。Thread 类的 start 方法的作用是启动相应的
线程。启动一个线程的实质是请求虚拟机运行相应的线程,而这个线程具体何
时能够运行是由线程调度器(线程调度器是操作系统的一部分)决定的。因此,
调用线程的 start 方法并不意味着线程已经开始运行,这个线程可能马上开始运
行,也有可能稍后才被运行,也有可能永远不运行。
下面介绍两种创建线程的方式(实际上还有其他方式,后续文章中会详细介
绍)。在此之前我们先来看一下 Thread 类的 run 方法的源码:
// Code 1-1
@Override
public void run() {
if (target != null) {
target.run();
}
}
这个 run 方法是在接口 Runnable 中定义的,它不接受参数也没有返回值。事实
上 Runnable 接口中也只有这一个方法,因此这个接口是一个函数式接口,这
意味着我们可以在需要 Runnable 的地方使用 lambda 表达式。Thread 类实现
了这个接口,因此它必须实现这个方法。target 是 Thread 类中的一个域,它的
类型也是 Runnable。target 域表示这个线程需要执行的内容,而 Thread 类的
run 方法所做的也只是执行 target 的 run 方法。
我们刚刚提到,Java 虚拟机会自动调用线程的 run 方法。但是,Thread 类的
run 方法已经定义好了,我们没有办法将自己需要执行的代码放在 Thread 类的
run 方法中。因此,我们可以考虑其他的方式来影响 run 方法的行为。第一种就
是继承 Thread 类并重写 run 方法,这样 JVM 在运行线程时就会调用我们重写
的 run 方法而不是 Thread 类的 run 方法;第二种方法是将我们要执行的代码传
递给 Thread 类的 target 方法,而刚好 Thread 类有几个构造器可以直接对
target 进行赋值,这样一来,JVM 在调用 run 方法时执行的仍然是我们传递的
代码。
在 Java 平台中,每个线程都可以拥有自己默认的名字,当然我们也可以在构造
Thread 类的实例时为我们的线程起一个名字,这个名字便于我们区分不同的线
程。
—下面的代码使用上述的两种方式创建了两个线程,它们要执行的任务很简单
—打印一行欢迎信息,并且要包含自己的名字。
// Code 1-2
public class WelcomeApp {
public static void main(String[] args) {
Thread thread1 = new WelcomeThread();
Thread thread2 = new Thread(() -> System.out.println("2.
Welcome, I'm " + Thread.currentThread().getName()));
thread1.start();
thread2.start();
}
}
class WelcomeThread extends Thread {
@Override
public void run() {
System.out.println("1. Welcome, I'm " +
Thread.currentThread().getName());
}
}
下面是这个程序运行时输出的内容:
1. Welcome, I'm Thread-0
2. Welcome, I'm Thread-1
多次运行这个程序,我们可以发现这个程序的输出也有可能是:
2. Welcome, I'm Thread-1
剩余10页未读,继续阅读
资源评论
小兔子平安
- 粉丝: 209
- 资源: 1940
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功