多线程编程(进程和线程)

涛哥J133 涛哥J133     2022-08-15     124

关键词:

多线程编程(进程和线程)

1.进程:指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程可以启动多个线程。

2.线程:指程序中一个执行流程,一个进程中可以运行多个线程。

技术分享

一、创建线程(两种方式)

二、线程的5种状态( New,Runnable,Running,Block,Dead ):

三、线程的优先级

四、守护线程 /精灵线程/后台线程

五、方法

六、同步代码锁(synchronized)

一、创建线程(两种方式):

方式1:采用继承Thread的方法

第一,继承 Thread 类

第二,覆盖 run 方法(就是更新运行过程), 实现用户自己的过程

第三,创建线程实例(就是创建一个线程)

第四,使用线程实例的 start() 方法启劢线程, 启劢以后线程会尽快的去并发执行 run()

public class Mythread extends Thread {
@Override
public void run() {
    for (int i = 0; i <100; i++) {
        System.out.println("hello"+i);
        yield();
    }
}
}

 Mythread my1=new  Mythread();
 my1.start();

方式2:采用实现Runnable的方法

public class MyThread2 implements Runnable {
int tickets = 10;
@Override
public void run() {

        for (int i = 0; i <10; i++) {
            if (this.tickets > 0){
            System.out.println(Thread.currentThread().getName() + "出售车票"
                    + tickets--);
            }
        }   
}
}

二、线程的5种状态( New,Runnable,Running,Block,Dead ):

1. New 新建状态:

new 关键字创建了一个线程后,该线程就处于新建状态,调用 start()方法时,线程启劢,迚入 Runnable 状态

2. Runnable 可运行(就绪)状态:

Runnable 状态时,表示线程准备就绪,等待获取 CPU

3.Running 运行(正在运行)状态:

线程获取了 CPU,则迚入 Running 状态

4.Block 阻塞(挂起)状态

线程调用了 sleep()方法,线程调用了一个阻塞式 IO 方法时被阻塞,当阻塞结束时,该线程将迚入 Runnable 状态

5.Dead 死亡状态

当线程的 run()方法执行结束,线程迚入 Dead 状态

三、线程的优先级

(资源紧张时候, 尽可能优先)setPriority()最高级别为10,最低级别为1,默认级别为5

     Mythread my1=new  Mythread();
     Mythread2 my2=new  Mythread2();
     my1.setPriority(10);//设置线程的优先级(资源紧张时候,尽可能优先)
     my2.setPriority(1);
    将my1的优先级设为10,my2的优先级设为1,多的代表优先被执行

四、守护线程 /精灵线程/后台线程

setDaemon();只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。Java 过程的结束:当前所有前台线程都结束时, Java 过程结束,当前台线程结束时,不管后台线程是否结束, 都要被停掉!

    Thread2 t2=new Thread2();
    t2.setDaemon(true);

五、方法

5.1:join();

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。 join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行。

     Mythread my1=new  Mythread();
     Mythread2 my2=new  Mythread2();
     my1.start();
     my1.join();//先执行完my1,再执行下面的
     my2.start();

5.2:sleep(long millis) ;

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。

    public void run() {
    for (int i = 0; i < 30; i++) {
        synchronized (this) {// 同步代码块
            if (tickets > 0) {
                System.out.println(Thread.currentThread().getName()
                        + "出售车票" + tickets--);
            }
        }
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}

5.3:yield();

暂停当前正在执行的线程对象,并执行其他线程。 一般写在重写方法里面

@Override
public void run() {
    for (int i = 0; i <100; i++) {
        System.out.println("yes"+i);
        yield();
    }
}

5.4:setName();

改变线程名称,使之与参数 name 相同。

Thread1 t1=new Thread1();
    t1.setName("主线程");

六、同步代码锁(synchronized)

1、异步:并发, 各干自己的。

2、同步:步调一致的处理。

多个线程并发读写同一个临界资源时候会发生”线程并发安全问题。

常见的临界资源:

1、多线程共享实例变量

2、静态公共变量

6、1 同步方法:要使用临界资源的位置加锁

int tickets=20;
public void run() {
    for (int i = 0; i <20; i++) {
        sale();
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}
public synchronized void sale(){//创建方法,加synchronized关键字
    if(tickets>10){
            System.out.println(Thread.currentThread().getName()+"出售车票"+tickets--);
        }
}

6、2 同步代码块的方式:synchronized();

int tickets = 20;
@Override
public void run() {
    for (int i = 0; i < 30; i++) {
        synchronized (this) {// 同步代码块
            if (tickets > 0) {
                System.out.println(Thread.currentThread().getName()
                        + "出售车票" + tickets--);
            }
        }
        try {
            Thread.sleep(10);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

}

python并发编程:多线程,多进程

‘‘‘多进程(线程)编程:1.进程和线程2.并发与并行3.同步和异步4.阻塞和非阻塞5.进程/线程的调度模型‘‘‘#综述‘‘‘进程和线程:1.进程:1)是一个程序在数据集上的一次动态执行过程2)由程序,数据集,进程控制模块组成2.线程:1)... 查看详情

多线程编程

1.进程和线程的概念进程是程序的一次执行,线程是进程中执行的一段程序片段。进程间是独立的,占用地址空间,上下文环境,线程运行在进程地址空间内。进程间通过IPC技术进行共享,同一进程下的线程天然共享同一进程地... 查看详情

python中的多线程和多进程编程(代码片段)

注意:多线程和多线程编程是不同的!!!第一点:一个进程相当于一个要执行的程序,它会开启一个主线程,多线程的话就会再开启多个子线程;而多进程的话就是一个进程同时在多个核上进行;第二点:多线程是一种并发操... 查看详情

多线程编程

一、线程线程是操作系统的概念,线程也称为轻量级进程,是CPU的基本使用单元,他的轻量级名称适合进程相关的。线程由线程ID、程序计数器、寄存器和堆栈组成,多个线程可以共享代码段和诸如打开的文件等系统资源。而传... 查看详情

关于进程,线程,多进程和多线程的网络编程(代码片段)

进程线程网络多任务编程:可以有效的利用计算机资源,同时执行多个任务进程:进程就是程序在计算机中一次执行的过程进程和程序的区别:程序是一个静态文件的描述,不占计算机的系统资源进程是一个动态的过程,占有cpu... 查看详情

python之多任务编程进程和线程的对比

1.进程和线程的对比的三个方向关系对比区别对比优缺点对比2.关系对比线程是依附在进程里面的,没有进程就没有线程。一个进程默认提供一条线程,进程可以创建多个线程。3.区别对比进程之间不共享全局变量线程之间共享全... 查看详情

如何理解python的多线程编程

线程是程序员必须掌握的知识,多线程对于代码的并发执行、提升代码效率和运行都至关重要。今天就分享一个黑马程序员Python多线程编程的教程,从0开始学习python多任务编程,想了解python高并发实现,从基础到实践,通过知... 查看详情

python爬虫编程思想(135):多线程和多进程爬虫--python与线程

        目录1.使用单线程执行程序2.使用多线程执行程序3.为线程函数传递参数4.线程和锁 查看详情

深入浅出java多线程编程

本文将从以下几个方面描述java多线程编程相关的内容。线程简介线程的状态与上下文切换的概念线程的监控synchronize和volatile多线程的优点和缺点多线程的设计模式线程池线程简介  进程代表运行中的程序。一个运行的java程序... 查看详情

python爬虫编程思想(134):多线程和多进程爬虫--线程与进程详解

       目录1.进程2.线程         线程和进程都可以让程序并行运行,但很多读者会有这样的疑惑,这两种技术有什么区别呢?本文将为读者解开这个疑惑。1.进程  ... 查看详情

java多线程并发编程

一、多线程1、操作系统有两个容易混淆的概念,进程和线程。进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源... 查看详情

带你学习多线程编程(代码片段)

线程概念定义线程就是进程内部的执行流,一个进程至少有一个线程,线程拥有自己的私有资源同时也会和进程共享资源。线程独有的资源线程描述符寄存器线程栈errno信号掩码实时调度策略线程和进程共享的资源全局变量堆代... 查看详情

多线程编程

一.进程与线程1.进程:正在运行的程序。从windows角度讲,进程是含有内存和资源并安置线程的地方。  线程:指在程序中的执行流,每个线程都有自己的专有寄存器(栈指针,程序计数器),但代码区是共享的,即不同... 查看详情

python爬虫编程思想(142):多线程和多进程爬虫--多进程(代码片段)

        尽管多线程可以实现并发执行,不过多个线程之间是共享当前进程的内存的,也就是说,线程可以申请到的资源有限。要想更能发挥并发的作用,可以考虑使用多进程。     ... 查看详情

java多线程编程

Java给多线程编程提供了内置的支持。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。这里定... 查看详情

java多线程编程(基础篇)

 一.进程和线程的区别:  进程:当前计算机正在运行的程序,进程是cpu分配资源的基本单位,一个进程至少有一个线程。  线程:计算机中任务调度和最小的执行单元,一个线程也被称为轻量级进程。  ... 查看详情

操作系统——进程管理:多线程编程(代码片段)

2.多线程编程2.1概述2.1.1动机2.1.2优点2.2多核编程2.3多线程模型2.3.1多对一模型2.3.2一对一模型2.3.3多对多模型2.4线程库2.5线程池2.多线程编程  进程模型假设每个进程是具有单个控制线程的一个执行程序。几乎所有的现代操作系... 查看详情

20180829-java多线程编程

 Java多线程编程Java给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发运行的部分。程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径。多线程是多任务的一种特别的形式。多线... 查看详情