谈谈多线程和进程,附上例题讲解 1

简介: 谈谈多线程和进程,附上例题讲解

本人刚写博客不久,是个新人,望大家能给予一些鼓励。 您的一个赞或者是评论区的一句话都将是对我最大的激励。

1.线程和进程的区别

进程:进程是资源分配的最小单位
线程:程序执行的最小单位

计算级执行程序的时候,会创建相应的进程,进行资源分配的时候,是以进程为单位进行相应的分配

每个进程都有相应的线程,再执行程序时,实际上是执行相应的一些列线程


地址空间:进程是有自己独立的地址空间,每次启动一个线程,都会分配对应的地址空间,来处理数据。线程是没有独立空间的,可以共享进程的地址空间


资源拥有

进程之间的资源是互相独立的,同一个进程内的线程是可以共享本进程内的资源


执行过程;每个独立的进程有一个程序运行的入口,我们回去顺序的执行序列和程序入口。线程不能独立执行,必须要依存再应用程序中,由应用程序提供多个线程执行控制


引入例子:比如说,A在一边在跟男朋友聊天,一边在跟我们上课。两个动作同时进行,一个应用程序就是一个可执行文件,里面包含了一个或者多个线程,一个或者多个线程中又包括了一个或者多个的进程


Window中的应用程序(软件运行)会产生线程(一个应用程序可以对应多个线程)->

进程


程序中使用多个线程(并发),效率会提升,线程是我们可以控制程序中的最小的执行单位,我们的多线程其实就是多个线程在进程里面去抢占资源


例子:A昨天早上起床(1h)-》洗漱(0.25h)-》吃早饭(0.25h)-》上课(8h)-》做作业(1h)-》打游戏(2h)-》聊天(6h)-》睡觉 。。。每次都是按照顺序执行,这个称为单线程

B:上课的时候在撩C-》做作业的时候也在撩C,在做一个动作的时候,同时也会在做另一个动作,那么这个就称为多线程

2.具体问题;

两个无限执行的循环

3.线程运行状态

4.Java种实现线程的方式

1使用Thread类

启动线程,调用的是start方法而不是run方法,start方法会调用start0,start0是一个native方法,JVM会自动执行


如果我们直接调用了start方法,线程就处于运行状态么?

先进入就绪状态,如果JVM分配了资源,则进入运行状态,如没有分配到资源则处于就绪状态 示例如下:

package com.etc.thread;
public class Thread01 extends Thread {
  public void run() {
    for(;1==1;) {
      try {
        sleep(500);//休眠
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      System.out.println("线程001");
    }
  }
}
package com.etc.thread;
public class Thread02 extends Thread {
  public void run() {
    for(;1==1;) {
        try {
          sleep(1000);
        } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      System.out.println("线程002");
    }
  }
}
package com.etc.thread;
public class TestThread {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Thread01 th1=new  Thread01();
    Thread02 th2=new  Thread02();
    th1.start();
    th2.start();
  }
}

sleep用法

sleep(500)//sleep里面存的是时间,单位是毫秒,作用是将当前线程休眠指定的时长

2 使用Runnable实现线程

3 使用callable实现线程

该接口下call方法有返回值

应用场景:

1:有返回结果,在某个线程的方法执行完成之后,需要告知调用者,结束了,例如我们想知道线程种代码的执行效率

2;面试:通过实现Callable接口,重写call方法,调用用到FutureTask

4 .FutureTask

阻塞

堵车;下水道堵了

泡茶案例

两个步骤:烧水(10s)-洗杯子(5个杯子,一个位子2s)(按照顺序去执行) 20

两个步骤:烧水(10s)-洗杯子(5个杯子,一个位子2s)(两个线程并行执行)10

目录
相关文章
|
1月前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
3月前
|
消息中间件 并行计算 安全
进程、线程、协程
【10月更文挑战第16天】进程、线程和协程是计算机程序执行的三种基本形式。进程是操作系统资源分配和调度的基本单位,具有独立的内存空间,稳定性高但资源消耗大。线程是进程内的执行单元,共享内存,轻量级且并发性好,但同步复杂。协程是用户态的轻量级调度单位,适用于高并发和IO密集型任务,资源消耗最小,但不支持多核并行。
60 1
|
1月前
|
消息中间件 Unix Linux
【C语言】进程和线程详解
在现代操作系统中,进程和线程是实现并发执行的两种主要方式。理解它们的区别和各自的应用场景对于编写高效的并发程序至关重要。
63 6
|
1月前
|
调度 开发者
深入理解:进程与线程的本质差异
在操作系统和计算机编程领域,进程和线程是两个核心概念。它们在程序执行和资源管理中扮演着至关重要的角色。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
63 5
|
1月前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
1月前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
60 4
|
2月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
2月前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
2月前
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
33 1
|
2月前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
48 2