谈谈多线程和进程,附上例题讲解 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

目录
相关文章
|
6天前
|
Java 测试技术 Python
Python的多线程允许在同一进程中并发执行任务
【5月更文挑战第17天】Python的多线程允许在同一进程中并发执行任务。示例1展示了创建5个线程打印"Hello World",每个线程调用同一函数并使用`join()`等待所有线程完成。示例2使用`ThreadPoolExecutor`下载网页,创建线程池处理多个URL,打印出每个网页的大小。Python多线程还可用于线程间通信和同步,如使用Queue和Lock。
27 1
|
7天前
|
数据处理 Python
Python并发编程:实现高效的多线程与多进程
Python作为一种高级编程语言,提供了强大的并发编程能力,通过多线程和多进程技术,可以实现程序的并发执行,提升系统的性能和响应速度。本文将介绍Python中多线程和多进程的基本概念,以及如何利用它们实现高效的并发编程,解决实际开发中的并发性问题。
|
8天前
|
Unix Linux 调度
linux线程与进程的区别及线程的优势
linux线程与进程的区别及线程的优势
|
8天前
|
Java 调度
【Java多线程】对进程与线程的理解
【Java多线程】对进程与线程的理解
17 1
|
8天前
|
调度
线程和进程的区别?
线程和进程的区别?
|
8天前
|
调度 Python 容器
【python】-详解进程与线程
【python】-详解进程与线程
|
8天前
|
运维 监控 Unix
第十五章 Python多进程与多线程
第十五章 Python多进程与多线程
|
8天前
|
Java 数据库连接 数据处理
Python从入门到精通:3.1.2多线程与多进程编程
Python从入门到精通:3.1.2多线程与多进程编程
|
8天前
|
存储 Linux Shell
Linux:进程等待 & 进程替换
Linux:进程等待 & 进程替换
32 9
|
8天前
|
存储 Linux C语言
Linux:进程创建 & 进程终止
Linux:进程创建 & 进程终止
33 6