10、多线程
10.1、 进程与线程
进程: 简单地说,在多任务系统中,每个独立执行的程序称为进程,也就是“正在进行的程序”。
线程: 一个进程中又可以包含一个或多个线程,一个线程就是一个程序内部的一条执行线索。
10.2、java生命周期:
①新建状态:即创建一个新的线程对象(new Thread)。当一个线程处于创建状态时,系统不为它分配资源。
Thread myThread=new Thread( );
②就绪状态:Java通过start方法启动处于新建状态的线程对象,使其进入就绪状态。处于就绪状态的线程已经具备了运行条件,将进入线程队列等待系统为其分配CPU,一旦获得了CPU,线程就进入运行状态,并调用自己的run方法。
myThread. start();
③运行状态:处于就绪状态的线程被调度并获得CPU资源后即进运行状态,每一个Thread类及其子类的对象都有一个run()方法,当线程对象被调度执行的时候,它将自动调用本对象的run()方法。
注意:线程的操作应该写到run()方法中。
④阻塞状态:一个正在执行的线程如果在某些特殊情况下,如被人为挂起或它的CPU时间片耗尽时,将让出CPU并暂时中止自己的执行,进入阻塞状态。
阻塞时它不能进入排列队列,只有当引起阻塞的原因被消除时,线程才可以转入就绪状态,重新进到线程队列中排队等待CPU资源,以便从原来终止处开始继续执行。
⑤终止状态: 终止状态是线程生命周期的最后一个阶段。线程完成全部工作后会正常结束运行,或线程被强制性的终止。
运行状态示意图:
10.3、创建线程的两种方法
(1)、用Thread创建:
public class ThreadDemo1{
public static void main(String args[]){
new TestThread().start();
while(true){
System.out.println("main thread is running");
}
}
}
class TestThread extends Thread{
public void run(){
while(true){
System.out.println(Thread.currentThread().getName() + " is running");
}
}
}
小结:
1. 要将一段代码在一个新的线程上运行,该代码应该在一个类的run函数中,并且run函数所在的类是Thread类的子 类。倒过来看,我们要实现多线程,必须编写一个继承了Thread类的子类,子类要覆盖Thread类中的run函数, 在子类的run函数中调用想在新线程上运行的程序代码。
2. 启动一个新的线程,我们不是直接调用Thread的子类对象的run方法,而是调用Thread子类对象的start(从 Thread类中继承的)方法,Thread类对象的start方法将产生一个新的线程,并在该线程上运行该Thread类对 象中的run方法,根据面向对象的多态性,在该线程上实际运行的是Thread子类(也就是我们编写的那个类)对 象中的run方法。
3. 由于线程的代码段在run方法中,那么该方法执行完成以后线程也就相应的结束了,因而我们可以通过控制run方 法中的循环条件来控制线程的终止。
(2)、用Runnable接口创建多线程
public class ThreadDemo3{
public static void main(String args[]){
//new TestThread ().start();
TestThread tt= new TestThread();//创建TestThread类的一个实例
Thread t= new Thread(tt);//创建一个Thread类的实例
t.start();//使线程进入Runnable状态
while(true){
System.out.println("main thread is running");
}
}
}
class TestThread implements Runnable { //extends Thread
public void run(){ //线程的代码段,当执行start()时,线程从此出开始执行
while(true){
System.out.println(Thread.currentThread().getName() + " is running");
}
}
}
10.4 、两种方法的比较
实现Runnable 接口相对于继承Thread类来说,有如下显著的好处:
1、适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码、数据有效分离,较好 地体现了面向对象的设计思想。
2、可以避免由于Java的单继承特性带来的局限。我们经常碰到这样一种情况,即当我们要将已经继承了某一个类的 子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么,这个类就只能采 用实现Runnable接口的方式了。
3、有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。当多个线程的执行代码来自同一个类的 实例时,即称它们共享相同的代码。
多个线程可以操作相同的数据,与它们的代码无关。当共享访问相同的对象时,即它们共享相同的数据。
当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了 Runnable接口的类的实例。
- 大小: 23.9 KB
分享到:
相关推荐
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
2.熟悉在多线程下参数传递及子程序调用 3.副本功能的简单制作 4.特色功能的简单思路 幻想神域多线程实战视频 第一章(基础设置) 1.多线程实战之中控台简单说明 2.多线程实战之绑定模式与字库制作 3.多线程实战...
### 多线程的核心知识点解析 #### 1. 多线程的作用 多线程技术在现代计算机系统中扮演着至关重要的角色,特别是在充分利用多核处理器能力方面。具体来说: - **发挥多核CPU的优势**:随着硬件技术的发展,多核...
10. 多线程工具类:Java提供了诸如Timer、ScheduledExecutorService等工具类,它们能够帮助开发者更方便地进行时间安排、任务调度等操作。 以上知识点只是Java多线程技术的一部分。在实际开发中,理解和应用这些...
【多线程篇1】 在iOS开发中,多线程技术是不可或缺的一部分,它使得应用程序可以同时执行多个任务,提高程序的响应速度和用户体验。本文将深入探讨Cocoa中的NSRunLoop、Run Loop管理、线程同步与通信以及线程调度等...
10. 多线程库的使用:在C++中,除了标准库提供的组件外,还有许多第三方库,比如boost::thread、Intel TBB(Threading Building Blocks)等,它们提供了额外的多线程编程支持。 综上所述,C++多线程编程涉及到了...
### JAVA多线程面试59题(含答案)知识点概览 #### 1. 多线程的作用 - **发挥多核CPU的优势**: - 随着计算机硬件技术的发展,多核CPU已经成为标准配置。多线程编程能够充分利用多核CPU的计算能力,提高程序的并行性...
Java多线程是Java编程中一个重要的概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要分为两种实现方式:通过子类化Thread类和实现Runnable接口。 1. 子类化Thread类: 当...
Java多线程是Java编程中的核心概念,尤其在开发高并发、高性能的应用程序时不可或缺。在Java中,多线程允许程序同时执行多个任务,从而提高系统资源的利用率和响应速度。下面我们将深入探讨Java多线程的相关知识点。...
线程池是一种多线程处理形式,它将多个线程预先创建并保存在一个池中,当有新的请求到来时,可以从池中取出一个线程来处理,而无需每次都创建和销毁线程,从而大大提高了系统的响应速度和资源利用率。在高并发场景下...
在IT领域,多线程是程序设计中的一个重要概念,尤其在服务器端开发和高性能计算中不可或缺。马士兵是一名知名的IT讲师,他的多线程训练营致力于帮助学员深入理解和掌握多线程技术。以下是对马士兵多线程笔记的详细...
在这个“IBM MQ多线程测试”中,我们将探讨如何利用多线程技术来增强IBM MQ的性能,特别是在并发生产者和消费者场景下的负荷测试。以下是关于这一主题的详细知识: 1. **IBM MQ简介**: IBM MQ是一种面向消息的...
在IT领域,多线程是程序设计中的一个重要概念,尤其在现代计算机系统中,它能够充分利用多核处理器的计算能力,提高程序的并发性能。在本示例中,我们聚焦于Delphi编程语言中的多线程应用。Delphi,作为一款强大的...
在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,实现并行处理和高效能编程。本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。...
本工程为自写的QT测试程序,已实现以下功能: 1.界面绘图,可修改画笔颜色、线宽等。 2.串口数据收、发(开发板上需更改...10.多线程的使用。 11.QT常用控件的使用。 该工程已通过测试,可在Ubuntu及开发板上运行。
### 多线程编程10例 #### 一、引言 在计算机科学领域,多线程编程是一种常见的技术手段,用于提高程序的执行效率和响应能力。通过本篇文章,我们将探讨多线程编程的基本概念及其在实际开发中的应用。 #### 二、...
10. **多线程的调试**:在开发过程中,利用Java的Thread类提供的堆栈信息和Thread Dump,可以帮助我们理解线程的执行状态,定位和解决问题。 通过学习和实践这个项目,你可以深入理解多线程的基本原理,以及如何将...
在Windows 10环境下使用Visual Studio 2019(VS2019)进行C语言的多线程编程,需要进行一系列配置步骤。这里主要介绍如何配置VS2019以便支持C语言的多线程功能,以及解决在配置过程中可能遇到的问题。 首先,我们...
《多线程技术大全》是一本详尽阐述多线程编程技术的专业电子书,它针对网络编程者提供了全面且深入的指导。多线程技术在现代软件开发中扮演着至关重要的角色,尤其在网络应用程序中,它能提升系统性能,实现并发处理...