【Java_多线程并发编程】基础篇—线程状态及实现多线程的两种方式
1.Java多线程的概念同一时间段内,位于同一处理器上多个已开启但未执行完毕的线程叫做多线程。他们通过轮寻获得CPU处理时间,从而在宏观上构成一种同时在执行的假象,实质上在任意时刻只有一个线程获得CPU资源执行,这种方式叫做并发。 线程状态图 说明:线程共包括以下5种状态。1. 新建状态(New): 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。3. 运行状态(Running) : 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。4. 阻塞状态(Blocked) : 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。线程阻塞的情况分三种: (01) 等待阻塞 – 通过调用线程的wait()方法,让线程等待某工作...
【实用工具】Teleport Pro爬取整个网站镜像到本地
1. 使用Teleport Pro可以完全或部分下载一个网站上的内容,在硬盘上创建一个与原网站完全相同的镜象,使用户能够离线浏览Teleport Pro的安装以及基本使用 在菜单栏Project下得详细配置
【Java_基础】并发、并行、同步、异步、多线程的区别
并发:位于同一个处理器上的多个已开启未完成的线程,在任意一时刻系统调度只能让一个线程获得CPU资源运行,虽然这种调度机制有多种形式(大多数是以时间片轮巡为主)。但无论如何,都是通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent)。并发的线程之间有两种关系:同步、互斥。 并行:在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel)。 来个比喻:并发和并行的区别就是一个人同时吃三个馒头和三个人同时吃三个馒头 同步:并发线程之间的一种相互依赖关系,进一步的说明就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。并发进程之间的另一种关系就是临界资源互斥。 异步:和同步相对,同步进程间是顺序执行相互依赖的,而异步进程间是彼此独立的。在进程处理其它事情(如读取数据)期间,CPU不是空等它的完成,而是继续处理其它进程。线程是实现异步的一个方式。 多线程:多线程是进程中并发运行的一段代码,能够实现线程之间的切换...
【IDE_PyCharm】PyCharm中配置当鼠标悬停时快速提示方法参数
方法一:通过在settings里面设置当鼠标至于方法之上时给出快速提示 方法二:按住Ctrl键,光标放在任意变量或方法上都会弹出该变量或方法的详细信息,点击鼠标还能跳转到变量或方法的定义处
【Java_基础】Java中Native关键字的作用
本篇博文转载与:Java中Native关键字的作用
【Java_基础】java中的常量池
1.java常量池的介绍java中的常量池,通常指的是运行时常量池,它是方法区的一部分,一个jvm实例只有一个运行常量池,各线程间共享该运行常量池。 java常量池简介:java常量池中保存了一份在编译期间就已确定的数据。它里面包括final常量的值(包括成员常量、局部常量和引用常量)、以及对象字面量的值。 在编译期间,每当给常量赋值它就会去检测常量池中是否存在该值,若存在直接返回该值的地址给常量,若不存在则先在常量池中创建该值,再返回该值的地址给常量。因此常量池中不可能出现相等的数据。 2.final常量一切经final关键字修饰的变量均为常量,final常量必须在定义时就赋初值,否则编译不通过。 3.对象字面量对象字面量是指直接以一常量给对象赋值,而不是在堆空间new出一个对象实例。 常见的两种对象字面量:基本类型的包装类对象字面量、String对象字面量。 3.1基本类型的包装类对象字面量java中基本类型的包装类大都实现了常量池技术,即Byte,Short,Integer,Long,Character,Boolean。这5种包装类默认创建了数值[-128,127]的相应...
【Java_基础】java中static与final关键字的区别
1.static关键字经static关键字修饰的成员被该类的所有对象所共享,任意一对象对静态变量的修改其它对象都是可见的。通常通过类名来引用static成员。类加载的连接阶段将会为静态成员变量在jvm内存的方法区分配空间,并在类的初始化阶段赋初值。 一个类的static成员变量只有“一份”(存储在方法区),无论该类创建了多少对象。看如下的示例: 123456789101112131415161718public class StaticDemo { public static void main(String[] args) { People p1 = new People(18); People p2 = new People(19); People p3 = new People(20); }}class People { private static int num; private int age; public People(int age) ...
【Java_基础】JVM内存模型与垃圾回收机制
1. JVM内存模型Java虚拟机在程序执行过程会把jvm的内存分为若干个不同的数据区域来管理,这些区域有自己的用途,以及创建和销毁时间。 JVM内存模型如下图所示 1.1 程序计数器 程序计数器(Program Counter Register),也有称作为PC寄存器。JVM中的程序计数器跟汇编语言中的程序计数器在功能上是相同的,即指示待执行指令的地址。当 CPU 需要执行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根据得到的地址获取到指令,在得到指令之后,程序计数器便自动加 1 或者根据转移指针得到下一条指令的地址,如此循环,直至执行完所有的指令。 Java中多线程是通过线程轮流切换来获得CPU执行时间的,因此,在任一具体时刻,一个CPU的内核只会执行一个线程中的指令,因此,为了能够使得每个线程都在线程切换后能够恢复在切换之前的程序执行位置,每个线程都需要有自己独立的程序计数器,并且不能互相被干扰,否则就会影响到程序的正常执行次序,因此 程序计数器是线程私有的。 1.2 Java栈 Java栈也叫虚拟机栈,也就是我们常常所...
【Java_基础】Java的访问权限控制
1.类成员的访问权限控制Java中类成员的访问权限分为四类:private,无(默认情况下),protected和public。其权限控制如下表所示: 修饰词 本类 同一个包的类 继承类 其他类 private √ × × × 无(默认) √ √ × × protected √ √ √ × public √ √ √ √ 其中,类成员在默认情况下没有任何修饰词,这样的成员具有“包访问权”,即位于同一个包中的类对其有访问权;而protected为“继承访问权”,即该类的子类对其具有访问权(同时,位于同一个包中的类也对其具有访问权)。 2.类自身的访问权限控制对于java类自身(除了内部类外,因为内部类也是类的成员故有上述四种权限修饰),其访问权限仅有两种:public和“无”(即包访问权),而没有private和protected。如果你 不希望其他任何人对该类拥有访问权,你可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象。但是可以通过该类的静态方法创建对象,如下面的例子: 12345678class Soup ...
【Java基础】java中的反射机制与动态代理
一、java中的反射机制java反射的官方定义:在运行状态下,可以获取任意一个类的所有属性和方法,并且可通过某类任意一对象实例调用该类的所有方法。这种动态获取类的信息及动态调用类中方法的功能称为java的反射机制。 获取一个类的Class对象是应用反射机制的前提,获取Class对象的方式有如下三种: instance.getClass(),这个是Object类里面的方法 Type.Class属性,任何的数据类型,基本数据类型或者抽象数据类型,都可以通过这种方式获取类 Class.forName(“类的全名”),Class类提供了这样一个方法,让我们通过类名来获取到对象类 通过反射机制操作某个类的属性 1234567891011121314package net.xsoftlab.baike;import java.lang.reflect.Field;public class TestReflect { private String proprety = null; public static void main(String[] args) ...