JAVA多线程基础
一、基础理论
1、进程:
狭义定义:进程就是程序的执行过程。
我们打开任务管理器的时候,如图,我们看到许多进程。
复杂一点说:进程就是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
2、线程:
线程,有的时候被称为轻量级进程(LWP),是程序执行流的最小单元。LWP是一种实现多任务的方法。
3、线程与进程的区别:
说了这么多官方的解释,其实简单来说将:一个应用程序就是一个进程,而线程是一个进程内部的多个运行单位。
4、多线程:
举一个最常见的例子:在用户界面中,利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应。
因此:多线程就是,将进程内部分为多个线程,线程同时进行。
多线程是共享一块内存空间和一组系统资源(在同一进程内),在程序内部可以互相调用(通过对象方法)。
线程本身的数据通常只有寄存器数据,以及程序执行时使用的堆栈,线程切换负担小。
二、java中的多线程实现
多线程模型是将代码的调用放到一个独立的运行单元——即线程中,让多个调用并行执行。
多线程模型代码示意如下:
public void ma(){ //在线程中调用mb();---> //在线程中调用mc();---> //在线程中调用md();---> System.out.println("三个线程并行执行。。"); } public void mb(){ } public void mc(){ } public void md(){ }
那么java中如何实现多线程呢?
1、继承Thread类实现线程:
重写Thread类的run()方法,调用start()方法启动线程。
public class Test extends Thread { public static void main(String[] args) { for (int t = 1; t < 10000; t++) { Test tm = new Test(t);// 构造Thread对象 tm.start();// 启动线程 } } // 构造器传入这个线程的ID public Test(int id) { this.id = id; } // 线程运行入口 public void run() { // 循环输出当点时间点 while (true) { long currentTime = System.currentTimeMillis(); System.out.println(id + "号线程:" + currentTime); } } private int id; }
2、实现Runnable接口创建线程
因为java是单继承的,为了方便类既使用多线程又可以继承其它类,所以java中还提供了另一种方法。
public class RunnableTest implements Runnable { public static void main(String[] args) { for (int t = 1000; t < 1010; t++) { RunnableTest rt = new RunnableTest(t);// 创建Runnable对象 Thread thread = new Thread(rt);// 构造Thread对象 thread.start();// 启动线程 } } // 构造器传入这个线程的ID public RunnableTest(int id) { this.id = id; } // 线程运行入口 public void run() { // 循环输出当前时间点 while (true) { long currentTime = System.currentTimeMillis(); System.out.println(id + "号线程:" + currentTime); } } private int id; }
线程的暂停:
改进run()方法。
public void run() { while (true) { long currentTime = System.currentTimeMillis(); System.out.println(id + "号线程:" + currentTime); try { Thread.sleep(this.id * 1000); } catch (InterruptedException ie) { System.out.println("线程在sleep中收到中断信号,但不退出:" + ie); } } }
Thread.sleep(long time)方法只会让被调用的线程暂停(或者叫做挂起)——不是停止,也不是退出,这个时间一过,线程对象又会被VM调度到运行状态。
3、以内部类的方式创建线程
public class ThreadTest { public static void main(String[] args) { ThreadTest tt = new ThreadTest(); for (int i = 0; i < 10; i++) { tt.startMyThread(i); } } /** * 这个方法会启动一个匿名线程线程 */ public void startMyThread(int threadID) { // 要传入匿名线程内使用的参数必须定义为final型 final int id = threadID; Runnable runner = new Runnable() { public void run() { int i = 10; boolean flag = true; while (flag) { try { Thread.sleep(3000); // 在匿名线程类中调用类中的其它方法 otherMethod(id); if (i > 13) { flag = false; } } catch (Exception ef) { } } } }; Thread t = new Thread(runner); t.start(); } // 测试方法 private void otherMethod(int i) { System.out.println("可以直接调用类中的其它方法:" + i); } }
// 要传入匿名线程内使用的参数必须定义为final型
final int id = threadID;
这个方法非常方便:在一个方法调用中启动匿名内部线程,线程可以直接使用类中的属性和方法。
4、继承TimerTask类实现线程的定时执行
public class TimerPrint extends TimerTask { public static void main(String[] args) { Timer timer = new Timer();// 创建一个定时器对象 TimerPrint dw = new TimerPrint();// 创建一个定时任务对象 // 调度这个定时任务在程序启动5秒后,每隔3秒运行一次 timer.schedule(dw, 5000, 3000); } // 重写继承自TimerTask中的run方法,作为线程运行时被调用 public void run() { runcount++; System.out.println(runcount + "次定时运行:" + System.currentTimeMillis() / 1000); } private int runcount = 0; }
三、多线程的优缺点
优点:
1、使用线程可以把占据时间长的程序中的任务放到后台去处理
2、用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
3、程序的运行速度可能加快
4、在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。
5、多线程技术在IOS软件开发中也有举足轻重的位置。
缺点:
1、如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。
2、更多的线程需要更多的内存空间。
3、线程可能会给程序带来更多“bug”,因此要小心使用。
4、线程的中止需要考虑其对程序运行的影响。
5、通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。
相关推荐
这个"JAVA多线程基础演练DEMO"提供了一些基础示例,帮助开发者更好地理解和掌握多线程的基本概念和用法。以下将详细讲解Java多线程的相关知识点: 1. **线程的创建** - **继承Thread类**:创建一个新类,继承自`...
Java多线程是Java编程中的重要...以上内容仅涵盖了Java多线程基础编程的一部分知识点,实际开发中还需要关注更多的并发控制策略、性能优化和调试技巧。对于深入理解Java多线程,还需要学习和实践更多相关的高级特性。
Java多线程是Java编程中的一个...以上只是Java多线程基础知识的一部分,深入学习还包括线程池的配置与优化、线程安全的设计模式、并发工具类的使用等。理解和掌握这些知识点对于编写高效、稳定的多线程程序至关重要。
java多线程基础说课PPT教案.pptx
Java多线程基础篇讲解是针对初学者设计的教程,旨在用简洁明了的语言帮助学习者更容易理解多线程的概念和应用。多线程编程在现代计算机系统中扮演着重要角色,尤其在CPU主频发展遇到瓶颈的情况下,通过超线程技术和...
Java多线程基础知识 Java多线程基础知识是Java编程语言中的一项重要技术,用于提高程序的执行效率和响应速度。在这里,我们将详细介绍Java多线程基础知识的相关概念和技术。 一、程序、进程和线程 程序(Program...
本资料“Java多线程基础-01、数组概述”将带你入门Java的多线程世界,并结合数组这一基本数据结构进行讲解。 首先,我们需要理解什么是线程。线程是操作系统分配CPU时间的基本单位,一个进程可以有多个线程,它们...
以上就是Java多线程基础学习的一些关键知识点,理解并掌握这些内容对于进行高效的多线程编程至关重要。在实际开发中,还需要根据具体需求选择合适的线程模型和同步机制,以实现高效、安全的并发程序。
Java 多线程基础笔记
总之,Java多线程基础是高效编程的关键,而理解数组定义和元素默认值规则则是构建安全、健壮的多线程程序的基础。通过合理运用多线程技术和掌握数组的内在特性,你可以编写出更加高性能、可扩展的Java应用程序。
在Java编程语言中,多线程是程序设计中的一个重要概念,尤其在处理高并发和资源优化的场景下...通过观看"Java多线程基础-02、数组定义方式一、访问、注意事项.mp4"这个视频教程,你将能更深入地学习这些重要的知识点。
java多线程基础说课学习课程.pptx
java多线程基础说课学习教案.pptx
java多线程基础说课PPT学习教案.pptx
一、Java多线程基础 1. 线程的创建:Java提供了两种创建线程的方式——继承Thread类和实现Runnable接口。继承Thread类可以直接创建一个新的线程类,而实现Runnable接口则可以将线程逻辑封装在任何类中,更利于代码...
一、Java多线程基础 1. 创建线程: - 继承Thread类:创建一个新的类,继承自Thread类,重写其run()方法,然后创建该类的实例并调用start()方法。 - 实现Runnable接口:创建一个实现了Runnable接口的类,实现run()...
#### 二、Java多线程基础 ##### 1. 线程的概念 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。一个标准的解释是:“线程是一种轻量级进程,它是进程内的一个执行实体。”Java中的每个程序至少...
### Java多线程基础 #### 线程的生命周期 Java线程有多种状态,主要包括: 1. **New(新建)**:当使用`new`关键字创建一个新的线程对象但尚未调用`start()`方法时,线程处于New状态。 2. **Runnable(可运行)**...
1. **Java多线程基础知识**:Java多线程允许程序同时执行多个任务,这是通过创建和管理线程实现的。Java提供了两种创建线程的方式:继承Thread类和实现Runnable接口。线程的状态包括新建、就绪、运行、阻塞和终止,...
#### 二、Java多线程基础 1. **线程创建**: - 继承`Thread`类。 - 实现`Runnable`接口。 2. **线程调度**: - 线程调度是由操作系统完成的,Java虚拟机通过与操作系统交互来管理线程的执行。 - Java中线程...