本地线程

day 31协程

▼魔方 西西 提交于 2019-12-02 06:57:47
Event事件 作用:用来控制线程的执行,由一些线程去控制另一些线程。 from threading import Event from threading import Thread import time #调用Event类实例化一个对象 e=Event() #若是该方法出现在任务中,则为False,阻塞 # e.wait()#False #若该方法出现在任务中,则将其他线程的False改为True,进入就绪态与运行态 # e.set()#True def light(): print('红灯亮...') time.sleep(5) #应该开始发送信号,告诉其他线程准备执行 e.set()#将car中的False变成True print('绿灯亮') def car(name): print(f'{name}正在等待红灯。。。') #让所有汽车任务进入阻塞态 e.wait()#False print(f'{name}开始飘逸') #让一个light线程任务,控制多个car线程任务 t=Thread(target=light) t.start() for line in range(10): t=Thread(target=car,args=(f'童子军坦克{line}号',)) t.start() '''红灯亮... 童子军坦克0号正在等待红灯。。。 童子军坦克1号正在等待红灯

10.24 总结

流过昼夜 提交于 2019-12-02 06:42:34
1.Event事件的作用: 用来控制线程的执行,由一些线程去控制另一些线程。 from threading import Event,Thread import time #调用Event类实例化一个对象 e=Event() #若该方法出现在任务中,则为False,阻塞 # e.wait() #False #若该方法出现在任务中,则将其他线程中的False改为True,进入就绪态与运行态。 # e.set() #True def light(): print('红灯亮。。') time.sleep(5) #应该开始发送信号,告诉其他线程准备执行。 e.set() print('绿灯亮。。') def car(name): print('正在等红灯。。。') #让所有汽车任务进入阻塞态 e.wait() print(f'{name}正在加速漂移。。') #让一个light线程任务,控制多个car线程任务 t=Thread(target=light) t.start() for line in range(10): t=Thread(target=car,args=(f'童子军jason{line}号', )) t.start() 运行结果: 红灯亮。。 正在等红灯。。。 正在等红灯。。。 . . 绿灯亮。。 童子军jason0号正在加速漂移。。 童子军jason1号正在加速漂移。。

谈谈你对多线程同步机制的理解?

风流意气都作罢 提交于 2019-12-02 06:40:09
线程同步是为了确保线程安全,所谓线程安全指的是多个线程对同一资源进行访问时,有可能产生数据不一致问题,导致线程访问的资源并不是安全的。 ( 如果多线程程序运行结果和单线程运行的结果是一样的,且相关变量的值与预期值一样,则是线程安全的。 ) java中与线程同步有关的关键字/类包括: volatile、synchronized、Lock、AtomicInteger等concurrent包下的原子类。。。等 线程安全 概述:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。 注: 这意味着如若要实现线程安全,代码本身必须要封装所有必要的正确性保障手段(比如锁的实现),以确保程序无论在多线程环境下如何调用该方法,将始终保持返回正确的结果。 Java的线程安全 我们在讨论Java的线程安全,实际上讨论的是“相对线程安全”。需要保证的是单独对象操作是线程安全的,调用过程中不需要额外的保障措施,但是涉及到某些业务场景需要特定顺序连续调用,就可能需要调用者考虑使用额外的同步手段保证同步。 例如使用 : synchronized Java中与线程同步有关的关键词/类: 1. Synchronized 同步原理 :

线程总结

与世无争的帅哥 提交于 2019-12-02 06:38:35
1.明确进程和线程的概念: 进程: 线程: 2.线程的特点: 并发性: 随机性: 通道性: 3.在java中只有Thread类代表线程 4.在java中使用线程的方式(在java中常见的创建线程的方式) 继承Thread类 实现Runnable接口 实现Callable接口 使用线程池 使用中间插件 4.1 继承Thread类 编写自定义类继承Thread类 创建自定义类的对象 把使用线程完成的业务代码编写到run方法中 调用Thread类的start方法,启动线程 4.2 实现Runnable接口 为什么要使用实现实现Runnable接口的方式创建线程? 如果自定义的类已经有了父类,则不能使用4.1的方式创建线程 使用实现Runnable接口实际上是把线程和要处理的业务功能解耦合(当需要线程给业务服务时,直接调用Thread(Runnable target)) Runnable接口中只有一个方法需要我们实现,就是 run 方法,需要把要使用线程服务的业务代码放入 run 方法 4.3 实现Callable接口 Callable接口中只有一个方法需要我们实现 ,就是 call 方法,需要把要使用线程的业务代码放入 call 方法 使用Runnable接口 和 Callable接口 完成多线程编程的区别是什么 ? Runnable接口的 run 方法没有返回值 ,

Python进程、线程、协程详解

ぐ巨炮叔叔 提交于 2019-12-02 06:37:41
进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配、任务的调度。 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等。 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结构——进程控制块。 进程就是一个程序在一个数据集上的一次动态执行过程。 进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。 在早期的操作系统里,计算机只有一个核心,进程执行程序的最小单位,任务调度采用时间片轮转的抢占式方式进行进程调度。每个进程都有各自的一块独立的内存,保证进程彼此间的内存地址空间的隔离。 随着计算机技术的发展,进程出现了很多弊端,一是进程的创建、撤销和切换的开销比较大,二是由于对称多处理机(对称多处理机(SymmetricalMulti-Processing)又叫SMP,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构

Java常见的面试题

…衆ロ難τιáo~ 提交于 2019-12-02 06:19:46
Java 基础知识点 Java 常见集合 高并发编程(JUC 包) JVM 内存管理 Java 8 知识点 网络协议相关 数据库相关 MVC 框架相关 大数据相关 Linux 命令相关 面试,是大家从学校走向社会的第一步。 互联网公司的校园招聘,从形式上说,面试一般分为 2-3 轮技术面试 +1 轮 HR 面试。 但是一些公司确实是没有 HR 面试的,直接就是三轮技术面。 技术面试中,面试官一般会先就你所应聘的岗位进行相关知识的考察,也叫基础知识和业务逻辑面试。 只要你回答的不是特别差,面试官通常会说:“咱们写个代码吧”,这个时候就开始了算法面试。 也就是说,一轮技术面试 = 基础知识和业务逻辑面试 + 算法面试。 关于算法面试的总结,各位可以查阅我先前交流的 Chat:“知名互联网公司校招中常见的算法题”。 本文我们主要从技术面试聊起。技术面试包括:业务逻辑和基础知识面试。 首先是业务逻辑面试 ,也就是讲项目。 面试官会对你简历上写的若干个项目其中之一拿出来和你聊聊。在期间,会针对你所做的东西进行深度挖掘。 包括:为什么要这么做?优缺点分析,假如重新让你做一次,你打算怎么做? 等等。这个环节主要考察我们对自己做过的项目(实习项目或者校内项目)是否有一个清晰的认识。 关于业务逻辑面试的准备,建议在平时多多思考总结,对项目的数据来源、整体运行框架都应该熟悉掌握。

JVM虚拟机基础

亡梦爱人 提交于 2019-12-02 06:17:54
1. 什么是JVM   JVM(Java Virtual Machine)是用来保证java的跨平台性的,将.class字节码文件转换成操作系统能够直接识别的指令,它的本质是一个进程。 2. Java对象编译过程 主要分为两个部分: 源文件编译成字节码对象 字节码由java虚拟机解释执行 3. 类加载器   类的加载是将类的.class文件中的二进制文件读取进内存中,将其放进运行时数据区的方法区内,然后在堆区创建一个java.lang.class对象,用来封装类在方法区内的数据结构。   注意:jvm主要是在程序第一次主动使用类的时候,才去加载该类,jvm并不是一开始就去嫁娶程序中所有的类,而是到不得不用的时候才加载它,并且只加载一次。 A. 类加载器 BootStrap ClassLoader(根类/启动类加载器):负责加载$JAVA_HOME中jre/lib/rt.jar相关的jar包,底层使用C++实现。 Extension ClassLoader(拓展类):负责加载$JAVA_HOME中jre/lib/ext/*.jar,JDK1.9的时候更名为Platform ClassLoader。 AppClassLoader(应用程序加载器):负责加载classpath中指定的jar包及目录下的class。JDK1.9的时候更名为System ClassLoader。

Java多线程面试问答

有些话、适合烂在心里 提交于 2019-12-02 06:11:44
今天,我们将讨论Java 多线程面试问答。 线程是Java面试问题中的热门话题之一。在这里,我从面试的角度列出了大多数重要的Java多线程面试问题,但是您应该对Java线程有足够的知识来处理后续问题。 Java多线程面试问答 1、Process和Thread有什么区别? 进程是一个独立的执行环境,可以将其视为程序或应用程序,而线程是进程中执行的对应任务。Java运行时环境作为交替运行,其中包含不同的类和程序作为进程。线程可以称为轻量级进程。线程需要更多的资源来创建和存在于进程中,线程共享进程资源。 2、多线程编程的好处是什么? 在多线程编程中,多个线程可以同时执行,从而提高性能,因为如果某些线程正在等待获取某些资源,则CPU不会处于中断状态。多个线程共享堆内存,因此最好创建多个线程来执行某些任务,而不要创建多个进程。例如,Servlet的在性能上比CGI更好,因为Servlet的支持多线程,但CGI不支持。 3、用户线程和守护线程之间有什么区别? 当我们在的Java程序中创建线程时,它被称为用户线程。守护程序线程在后台运行,并且不会阻止JVM终止。当没有用户线程在运行时,JVM会关闭程序并退出。从守护程序线程创建的子线程也是守护程序线程。 4、我们如何在Java中创建线程? 在Java中创建线程的方法-一种是通过实现Runnable接口,然后从该接口创建线程对象

volatile和synchronized区别

你。 提交于 2019-12-02 05:47:27
volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的庞大开销,倘若能恰当的合理的使用volatile,自然是美事一桩。 为了能比较清晰彻底的理解volatile,我们一步一步来分析。首先来看看如下代码 public class TestVolatile { boolean status = false; /** * 状态切换为true */ public void changeStatus(){ status = true; } /** * 若状态为true,则running。 */ public void run(String t){ if(status){ System.out.println("running...." + t); } } } 上面这个例子,在多线程环境里,假设线程A执行changeStatus()方法后,线程B运行run()方法,可以保证输出"running....."吗?   答案是NO!   这个结论会让人有些疑惑,可以理解。因为倘若在单线程模型里,先运行changeStatus方法,再执行run方法,自然是可以正确输出"running...."的;但是在多线程模型中

Java多线程面试问答

风流意气都作罢 提交于 2019-12-02 01:56:31
今天,我们将讨论Java 多线程面试问答。 线程是Java面试问题中的热门话题之一。在这里,我从面试的角度列出了大多数重要的Java多线程面试问题,但是您应该对Java线程有足够的知识来处理后续问题。 Java多线程面试问答 1、Process和Thread有什么区别? 进程是一个独立的执行环境,可以将其视为程序或应用程序,而线程是进程中执行的对应任务。Java运行时环境作为交替运行,其中包含不同的类和程序作为进程。线程可以称为轻量级进程。线程需要更多的资源来创建和存在于进程中,线程共享进程资源。 2、多线程编程的好处是什么? 在多线程编程中,多个线程可以同时执行,从而提高性能,因为如果某些线程正在等待获取某些资源,则CPU不会处于中断状态。多个线程共享堆内存,因此最好创建多个线程来执行某些任务,而不要创建多个进程。例如,Servlet的在性能上比CGI更好,因为Servlet的支持多线程,但CGI不支持。 3、用户线程和守护线程之间有什么区别? 当我们在的Java程序中创建线程时,它被称为用户线程。守护程序线程在后台运行,并且不会阻止JVM终止。当没有用户线程在运行时,JVM会关闭程序并退出。从守护程序线程创建的子线程也是守护程序线程。 4、我们如何在Java中创建线程? 在Java中创建线程的方法-一种是通过实现Runnable接口,然后从该接口创建线程对象