多线程详解(一)

一、概念

进程:正在进行中的程序(直译),是静态的概念。程序执行时,内存会为其分配空间。

线程:通俗的讲,线程就是一个程序中的不同执行路径。换句话说,进程中负责程序执行的控制单元(执行路径)就是线程。

一个进程中可以有多个执行路径,我们称之为多线程。一个进程中至少有一个线程,因为进程是静态的概念,不能执行,

它只负责从内存中分配空间,执行的过程由线程完成。

为什么要开启多线程呢?

程序中需要执行耗时任务时,如果只有一个线程,要一直等到耗时任务结束才可以继续执行下面的代码,比较耗时。如果开启一个

专门执行耗时任务的线程,执行耗时任务时就不需要等待,主线程可以继续干自己想干的事。所以开启多线程是为了能够同时运行多部分的代码。

每个线程都有自己的运行内容,这个内容称之为任务,即线程要执行的任务。

应用程序的执行都是CPU在做着快速切换完成的,一个CPU在同一时间点上只能执行一个线程。且切换时随机的。所以当开启多个线程时,每个线程

分到的时间片的概率就降低了,会降低运行效率。

开启多线程的好处和坏处:

好处:解决了多部分代码,多个功能块同时运行的问题

坏处:线程太多会降低效率

Java虚拟机启动时开启了几个线程呢?

JVM启动时开启了多个线程,至少有两个是可以分析出来的

1.执行main函数的线程

2.处理垃圾回收的线程

为什么呢?

我们说了,创建线程的目的就是为了开启一条执行路径,去运行指定的代码和其他代码实现同时运行的效果,而

运行的指定代码就是执行路径的任务。而JVM创建的主线程的任务(执行代码)都定义在main函数中,在main函数中执行代码时

内存会为其分配资源,main函数执行完了以后,资源要被释放,释放资源就要用到垃圾回收器,垃圾回收器实质上也是一个处理垃圾

回收的线程。

二、线程的创建

既然主线程的任务都定义在主函数中,那么自定义的线程的任务又定义在哪呢?

Thread 用户描述线程,而线程是需要任务的,所以Thread类也对任务描述。Thread类中有一个run方法,

run方法中定义的就是线程要执行的任务代码,开启线程是为了运行指定的代码,

所以只有继承Thread类 并且重写其run方法,将指定的运行代码定义在run方法中即可。

创建线程方式一:继承Thread类

步骤:

    1.定义一个类继承Thread类

    2.重写Thread类的run方法

    3.直接创建Thread子类的对象创建线程

    4.调用Thread类的start方法启动线程

线程启动之后,会自动调用run方法执行线程。那么问题来了,直接调用run方法和调用start方法有 什么区别呢?

直接调用run方法就是一个普通的方法调用,并没有在主线程中开启另外一个线程

而调用start方法是启动了一个新的进程

当同时执行多个子线程时,我们如何区分正在执行的是哪个线程呢?

同时执行多个子线程时,我们可以通过Thread类的currentThread()方法获取当前在执行的是哪一个线程,

然后调用getName()方法获取当前正在执行的线程名称,即可区分出当前执行的是哪个线程。

创建线程方式二:实现Runnable接口

步骤:

  1.定义一个类实现Runnable接口

  2.重写Runnable接口中的run方法(线程的任务代码封装在run方法中)

  3.通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数参数传递给

Thread对象。为什么呢? 因为线程的任务都封装在Runnable接口子类对象的run方法中,Thread对象

中没有任务,而每个线程都必须要有任务,所以要在线程对象创建时就必须明确要运行的任务。

4.调用Thread类的start方法启动线程

时间: 2024-10-11 13:00:00

多线程详解(一)的相关文章

java多线程详解

转自:线程间通信.等待唤醒机制.生产者消费者问题(Lock,Condition).停止线程和守护线程.线程优先级 1  线程间通信 1.1  线程间通信 其实就是多个线程在操作同一个资源,但是操作的动作不同. 比如一个线程给一个变量赋值,而另一个线程打印这个变量. 1.2  等待唤醒机制 wait():将线程等待,释放了CPU执行权,同时将线程对象存储到线程池中. notify():唤醒线程池中一个等待的线程,若线程池有多个等待的线程,则任意唤醒一个. notifyAll():唤醒线程池中,所有

iOS开发——多线程OC篇&多线程详解

多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念: 进程 正在进行中的程序被称为进程,负责程序运行的内存分配 每一个进程都有自己独立的虚拟内存空间 线程 线程是进程中一个独立的执行路径(控制单元) 一个进程中至少包含一条线程,即主线程 可以将耗时的执行路径(如:网络请求)放在其他线程中执行 创建线程的目的就是为了开启一条新的执行路径,运行指定的代

Java 多线程详解(二)------如何创建进程和线程

Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html 在上一篇博客中,我们已经介绍了并发和并行的区别,以及进程和线程的理解,那么在Java 中如何创建进程和线程呢? 1.在 Windows 操作系统中创建进程 在 windows 操作系统中,我们创建一个进程通常就是打开某个应用软件,这便在电脑中创建了一个进程.更原始一点的,我们在命令提示符中来做(我们以打开记事本这个进程为例): 第一步:windows+R,

Java 多线程详解(五)------线程的声明周期

Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程:http://www.cnblogs.com/ysocean/p/6883491.html Java 多线程详解(三)------线程的同步:http://www.cnblogs.com/ysocean/p/6883729.html Java 多线程详解(四)------生产者和消费者:http:/

Java 多线程详解(三)------线程的同步

Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程:http://www.cnblogs.com/ysocean/p/6883491.html 介绍完如何创建进程以及线程了,那么我们接着来看一个实例: 利用多线程模拟 3 个窗口卖票 第一种方法:继承 Thread 类 创建窗口类 TicketSell package com.ys.thread; p

Java多线程详解与晋级(一)

Java多线程详解与晋级(一) Java线程的概念与原理 一.操作系统中线程和进程的概念 进程是指操作系统内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程. 线程是指进程中的一个执行流程,一个进程中可以运行多个线程.比如java.exe进程中可以运行很多线程.线程总是属于某个进程,进程中的多个线程共享进程的内存. 简单来说,进程就是一个应用程序在操作系统上的一次执行过程,而线程是进程中的一次执行流程,进程包含多个线程在运行. 二.Java的线程 Thread类

Android研究之游戏开发多线程详解

 游戏开发与软件开发多线程的重要性       如果程序主线程被阻塞超过5秒,系统会提示"应用程序无响应" 这就是ANR . ANR的全称是Application Not Responding,使用多线程可以避免ANR.但是这里要注意一下不要为了避免ANR而过多的使用多线程,除非万不得已的情况. 比如访问网络服务端返回的过慢.数据过多导致滑动屏幕不流畅.或者I/O读取过大的资源等等.这里可以开启一个新线程来处理这些耗时的操作. 如果过多使用多线程会出现数据同步的问题须要程序员去处理

Java多线程详解(二)

评论区留下邮箱可获得<Java多线程设计模式详解> 转载请指明来源 1)后台线程 后台线程是为其他线程服务的一种线程,像JVM的垃圾回收线程就是一种后台线程.后台线程总是等到非后台线程死亡之后,后台线程没有了服务对象,不久就会自动死亡,不再复活.利用setDaemon方法可以把一个线程设置为后台线程,但必须在线程启动之前调用. 例如 : /* * @author [email protected] */ public class DaemonThread extends Thread { pu

Java 线程(多线程)详解

查看了许多书籍,网上的博客,现在我来说一下有关于我对线程的详解,有不对的欢迎指正. 一. 线程的生命周期: 程序有自己的一个生命周期,线程也不例外,也有自己的生命周期.查看许多书籍或者网上资料,发现了一件很有趣的事情,那就是它们对线程的生命周期不是唯一.有两种或者以上的线程生命周期. 第一种线程生命周期线程状态转换图:一共5个状态:新建,就绪,运行,阻塞和结束   图 1 第二种生命周期图:一共6个状态:New,Runnable,Blocked,Waiting,Timed Waiting,Ter

Java从零开始(2)--多线程详解

多线程指的是在单个程序中可以同时运行多个同的线程执行不同的任务.线程是程序内的顺序控制流,只能使用分配给序的资源和环境.     一.线程与进程的区别 多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响. 线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小. 多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用CPU而只和I/O等资源打交道时,让需要占用CPU资源的其